0

我想阅读以下 XML 文件:

<RootNode>
    <Node id="1"> value1 </Node>
    <Node id="2"> value2 </Node>
    <Node id="3"> value3 </Node>
    <Node id="4"> value4 </Node>
    <Node1 id="1"> value11 </Node1>
    <Node1 id="2"> value12 </Node2>
    ...
</RootNode>

现在取决于我想要获取值的节点 ID。就像如果节点名称是Node并且 id 是1值应该是value1,如果节点名称是Node1并且 id 是2那么值应该是value12

我可以Node使用以下代码获取具有名称的元素:

try{
    DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(xmlString));
    Document doc = db.parse(is);
    NodeList nodes = doc.getElementsByTagName("Node");
}
catch(Execption e){
    e.printStacktrace();
}

如何根据属性(id在这种情况下)获取元素?

4

3 回答 3

2

要检查 id 的值,首先获取属性 'id' 值

private static String getAttributeValue(final Node node, final String attributeName) {
    Element element = (Element) node;
    return element.getAttribute(attributeName);
}


通过这种方式将 node(name = 'node') 和属性 name('id') 传递给此方法,这将返回属性 id 的值。现在你有了价值,你有了节点,所以你可以做任何你想做的事情:)

迭代节点列表

for (int i = 0; i < nodeList.getLength(); i++) {
    Node node = nodeList.item(i);
}
于 2013-07-05T05:21:33.733 回答
0

使用此代码

for (int i = 0; i < nodes.getLength(); i++) {
      NamedNodeMap parmAttrMap = parmList.item(i).getAttributes();
      if ((parmAttrMap.getNamedItem("id") != null)) {
         //get value of id -- parmAttrMap.getNamedItem("id");
  }
}
于 2013-07-05T05:21:53.780 回答
0

XPath 可以帮助...

    DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(xmlString));
    Document doc = db.parse(is);
    XPathFactory xPathfactory = XPathFactory.newInstance();
    XPath xpath = xPathfactory.newXPath();
    XPathExpression expr = xpath.compile("//Node[@id=\"YOUR_VALUE_HERE\"]");
    NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

将 YOUR_VALUE_HERE 替换为所需的 id 值,并遍历 nl

于 2013-07-05T05:28:35.673 回答