2016-12-27 125 views
0

我在下面的格式接收古怪的格式個XML:解析怪異格式複雜的個XML使用Java

<File xml:space="preserve"> 
    <Subfile keyword="Store" tag="0"> 
      <Value number="1">Amazon</Value> 
    </Subfile> 
    <Subfile keyword="Owner" tag="1"> 
      <Value number="1">Alice Murphy</Value> 
    </Subfile> 
    <Subfile keyword="Date" tag="2"> 
      <Value number="1">20161114</Value> 
    </Subfile> 
</File> 

在這種情況下,這將是檢索值「愛麗絲墨菲」,而無需最有效的方法解析整個XML?

謝謝。

+0

有沒有辦法來檢索值,而不解析XML文件的價值節點。 「Caleb Haldane」發佈的內容是實現您的目標的簡單方法,但它會在內部解析文件。所以要麼你正在尋找一種方法,所以你不必解析它(在這種情況下,答案由「Caleb Haldane」給出)。否則無法實現您的目標。 – n247s

+2

爲什麼你稱之爲「奇怪格式化」?它對我來說看起來像普通的XML。 – ajb

+0

@ n247s謝謝。這就說得通了。 – 000000000000000000000

回答

4

你可以用xpath解析你想要的節點。

下的XPath中查找子文件節點,這裏的關鍵詞是「所有者」

// parse the XML as a W3C Document 
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
Document document = builder.parse(new File("<xml path and filename>")); 

XPath xpath = XPathFactory.newInstance().newXPath(); 
String expression = "/File/Subfile[@keyword='Owner']/Value"; 
Node ownerNode = (Node) xpath.evaluate(expression, document, XPathConstants.NODE); 
+1

謝謝。一個澄清雖然。與「所有者」線路給我錯誤消息。但是當我在「值」之後刪除「/」時,錯誤消失。這是正確的路徑格式嗎? – 000000000000000000000

+0

@ruby_le你是對的,我從另一個網站轉移了xpath語句,並忘記修剪它。 –

+2

爲了Java的好處,「Owner」引號需要轉義。我已經將它們編輯爲單引號。 –