我有一种情况需要解析以下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>
问题:
在上面的xml中,我需要获取band=25
条目密钥而不是band=45
条目密钥的值。当我使用:
NodeList nodes = doc.getElementsByTagName("entry");
我首先将频段值设为25
并将其存储在地图中,然后当我将频段值设为45
时,地图中的频段值25
会被{{1}覆盖}。我只需要以一种方式解析xml,我将波段值设为45
而不是25
。
答案 0 :(得分:0)
你可以简单地放doc.getElementsByTagName("entry").item(0)
因为这将得到第一个项目&#34; entry&#34;。但这不是最佳方式。
最好查看XPath并获取所需的特定XML节点和值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));