xpath按节点检索对象列表

时间:2015-09-08 15:38:16

标签: java xpath

如何使用xpath:

下面的Gender按性别检索具有单个属性值的Psinfo对象
<?xml version="1.0" encoding="UTF-8"?>
<Employees>
    <Employee>
        <Psinfo>
            <Name>Jhon</Name>
            <Gender xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string"
                >Male</Gender>
            <Empsal xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string"
                >95572553</Empsal>
        </Psinfo>
        <Psinfo>
            <Name>David</Name>
            <Gender xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string"
                >Male</Gender>
            <Empsal xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string"
                >1000000</Empsal>
        </Psinfo>
    </Employee>
</Employees>

我尝试使用此表达式使用xpath:

/Employees/Employee/Psinfo[contains(Gender,'Male')]

和以下Java代码:

     final NodeList list = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
                    for (int i = 0; i < list.getLength(); i++) {
                        final Node node1 = list.item(i);
                        // System.out.println(node.getNodeName().getTextContent());
final String result1 = (String) expr.evaluate(node1, XPathConstants.STRING); 
//but instead of getting individual tag values, giving whole  value as "JhonMale95572553
                    }

我期望每次迭代都有一个属性值

Jhon
Male
95572553

2 个答案:

答案 0 :(得分:1)

使用此XPath表达式:

//Psinfo[contains(Gender,'Male')]

答案 1 :(得分:0)

XML中没有名为S36B的元素,因此结果为空。

更正XPath表达式后编辑:

表达式字符串是正确的。因此,您未向我们展示的代码中必定存在错误(例如,您如何构造文档,如何构建XPath表达式对象等)。