<?xml version="1.0" encoding="UTF-8"?>
<MS_xml_root>
<message>
<field id="A">A</field>
<field id="B">B</field>
<field id="C"></field>
</message>
<message>
<field id="A">A</field>
<field id="B">B</field>
<field id="C"></field>
</message>
</MS_xml_root>
我想通过使用XPath提供字段ID键来读取字段标签值。但是我可以读取属性值。
String exp = "//MS_xml_root/message/field"
NodeList list = (NodeList) xPath.compile(exp).evaulate(doc,XPathConstants.NODESET);
for(int i=0;i < list.getLength(); i++){
//need to read the value here.
}
答案 0 :(得分:1)
String id = "A";
String exp = "//MS_xml_root/message/field[@id='" + id + "']";
将获得带有id="A"
的节点。使用NODE
而不是NODESET
来获得一个Node
。
如果需要属性值,请使用类似以下内容的
:String exp = "//MS_xml_root/message/field/@id";
答案 1 :(得分:1)
似乎您需要Java方法来获取具有特定ID的节点的TextContent。 您可以使用以下代码来做到这一点:
private static List<String> getFieldNodeValues(Document doc, String id) throws XPathExpressionException {
String exp = "//MS_xml_root/message/field[@id=" + "\"" + id + "\"" + "]";
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList list = (NodeList) xpath.compile(exp).evaluate(doc,XPathConstants.NODESET);
List<String> res = new ArrayList<>();
for ( int i = 0; i < list.getLength(); i++ ) {
Node node = list.item(i);
res.add(node.getTextContent());
}
return res;
}
您可能希望值列表而不是一个值,因为对于给定的ID值,您的xml似乎具有多个字段。