Xpath读取给定的属性标签值

时间:2020-07-31 15:15:59

标签: java xpath

<?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.
}

2 个答案:

答案 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似乎具有多个字段。