2016-03-02 139 views
0

我有一個情況在這裏,我需要解析以下XML:解析有兩個相同的孩子一個XML節點

<Attributes> 
    <Map> 
     <entry key="band" value="25" /> 
     <entry key="triggerSnapshots"> 
      <value> 
       <Map> 
        <entry key="AttributeChange"> 
         <value> 
          <Attributes> 
           <Map> 
            <entry key="band" value="45" /> 
           </Map> 
          </Attributes> 
         </value> 
        </entry> 
        <entry key="ManagerTransfer" value="7262079" /> 
        <entry key="needsCreateProcessing"> 
         <value> 
          <Boolean>true</Boolean> 
         </value> 
        </entry> 
       </Map> 
      </value> 
     </entry> 
    </Map> 
</Attributes> 

問題:

  1. 在上面的XML我需要皮卡輸入密鑰的值爲band=25,而不是band=45的輸入密鑰。當我使用解析我的XML:

    NodeList nodes = doc.getElementsByTagName("entry");

我第一次拿到帶價值25並將其存儲在地圖中,然後當我帶值45在地圖樂隊值25得到由覆蓋45。我只需要解析XML的方式,我得到的帶值爲25而不是45

+0

如果XML並不大的特定XML節點和值,那麼我建議的XPath parser..in你可以把整個路徑如 XPath xpath = XPathFactory.newInstance()。newXPath(); map =(String)xpath.evaluate(「/ Attributes/Map/entry/value/Map」,doc,XPathConstants.STRING); –

+0

這個嵌套是否有限制? –

回答

0

您可以簡單地把doc.getElementsByTagName("entry").item(0) ,因爲這將得到第一個項目是「條目」。但這不是最好的選擇。

可能是最好看的XPath,並得到你想要xpath.compile("/Attributes/Map/entry")

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder; 
builder = factory.newDocumentBuilder(); 
InputSource input = new InputSource(new StringReader(xmlString)); 
org.w3c.dom.Document doc = builder.parse(input); 
XPath xpath = XPathFactory.newInstance().newXPath(); 
javax.xml.xpath.XPathExpression expr= xpath.compile("/Attributes/Map/entry[@key='band']/@value"); 
System.out.println(expr.evaluate(doc, XPathConstants.STRING)); 

More on XPath here

相關問題