使用两个相同的子节点解析XML

时间:2016-03-02 00:09:10

标签: java xml xml-parsing

我有一种情况需要解析以下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");

  2. 我首先将频段值设为25并将其存储在地图中,然后当我将频段值设为45时,地图中的频段值25会被{{1}覆盖}。我只需要以一种方式解析xml,我将波段值设为45而不是25

1 个答案:

答案 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));

More on XPath here