2012-01-12 82 views
2

我很難從使用XPath的XML文件獲取XML值。 XML文件有以下模式:使用XPath檢索XML元素

<devicesInfo> 
    <deviceInfo> 
    <deviceId>device1</deviceId> 
    <macAddress>00:21:85:C9:19:A4</macAddress> 
    <deviceType>deviceType1</deviceType> 
    <deviceClass>/Server/SSH/Linux/</deviceClass> 
    <location>location1</location> 
    <productionState>Decommissioned</productionState> 
</deviceInfo> 
<deviceInfo> 
    <deviceId>device2</deviceId> 
    <macAddress>00:21:85:C9:19:F5</macAddress> 
    <deviceType>deviceType1</deviceType> 
    <deviceClass>/Server/SSH/Linux/</deviceClass> 
    <location>location1</location> 
    <productionState>Decommissioned</productionState> 
</deviceInfo> 
</devicesInfo> 

我試圖做的是首先創建一個自定義的類的實例,把我所造的,其中包含了以下方法:

public NodeList getNodesList(String xmlQuery) throws XPathExpressionException { 
     NodeList nodes = null; 
     try { 
      nodes = (NodeList) xPath.evaluate(xmlQuery, doc, XPathConstants.NODESET); 
     } catch (XPathExpressionException ex) { 
      throw ex; 
     } 
     return nodes; 

    } 

然後,此方法被調用查詢:

NodeList nodes = xmlHandler.getNodesList("/devicesInfo/deviceInfo"); 

到目前爲止好,因爲這是返回節點列表長度爲2,這基本上是人l文件中的deviceInfo元素。 接下來我要做的是遍歷每個deviceInfo以獲取其子元素(deviceId,macAddress,deviceType,deviceClass,location,productionState)的值。

我試着做到以下幾點: NodeList list = nodes.item(0).getChildNodes();

然後

System.out.println("First element is "+list.item(0).getTextContent()); 

這給了我一個空字符串。雖然當我嘗試這樣做:

System.out.println("First element is "+list.item(1).getTextContent()); 

它基本上顯示與索引「1」的項目,而不是項目與索引「0」,這結束了打印「DEVICE1」,這是第一個元素的值。

所以爲了得到所有元素的值,我會使用1,3,5,7,9,11的索引。我知道我做錯了什麼。任何人都可以幫助我嗎?

+0

'list'和'children'和'nodes'之間的關係是什麼? – 2012-01-12 18:35:26

+0

這是一個錯字。兒童實際上是「名單」。 – 2012-01-12 18:49:44

回答

2

<deviceInfo>元素的子元素包含多個僅包含空白的文本節點。您需要將其過濾出來,以便您只遍歷作爲元素的子元素,或者在<deviceInfo>元素內僅包含空格的文本節點爲ignored的模式下解析XML。

+0

哇!謝謝!這已經解決了我的問題! 我已經創建了一個生成此XML文件的進程。我能以某種方式仍然在該過程中格式化XML文件,而不必擔心我上面描述的問題? – 2012-01-12 18:44:06

+0

@MouhammedSoueidane,我相信有一些方法可以使用XML模式來指定哪些元素可以忽略空格。如果你不使用這些驗證,那麼我認爲你最好的選擇是首先刪除可忽略的空白,可能是通過編寫一個xpath查詢來匹配所有不包含非空格字符的文本節點。我不會讓你的XML難以通過不需要空白節點進行調試。 – 2012-01-12 18:55:40

+0

現在我知道問題出在哪裏,這幫助我解決了這個問題: http://stackoverflow.com/questions/229310/how-to-ignore-whitespace-while-reading-a-file-to-produce- an-xml-dom 非常感謝你,你是一個拯救生命的人。 – 2012-01-12 19:09:07