【问题标题】:Split XML based on member tag value根据成员标签值拆分 XML
【发布时间】:2014-07-10 13:22:37
【问题描述】:

我有一个看起来像的 xml

<?xml version="1.0"?>
<company>
    <staff>
        <firstname>John</firstname>
        <lastname>Player</lastname>
        <nickname>JP</nickname>
        <salary>1000</salary>
    </staff>
    <staff>
        <firstname>Peter</firstname>
        <lastname>Shaw</lastname>
        <nickname>PS</nickname>
        <salary>2000</salary>
    </staff>
</company>

只有当名字是 Peter 时我才需要选择,即我的 o/p 应该是:

        <staff>
            <firstname>Peter</firstname>
            <lastname>Shaw</lastname>
            <nickname>PS</nickname>
            <salary>2000</salary>
        </staff>

我正在使用 XPath,示例代码如下所示:

XPathFactory factory = XPathFactory.newInstance();
    XPath xpath = factory.newXPath();
    XPathExpression expr = xpath.compile("./company[staff/firstname = 'Peter']");

    Object result = expr.evaluate(doc, XPathConstants.NODESET);
    System.out.println("Print  " + result);  //comes as com.sun.org.apache.xml.internal.dtm.ref.DTMNodeList@ef0cdb
    NodeList nodes = (NodeList) result; 
    System.out.println("Size"+ nodes.getLength()); // comes as 0
    for (int i = 0; i < nodes.getLength(); i++) {
        System.out.println(nodes.item(i).getNodeValue());
    }

请提供指导

【问题讨论】:

    标签: java xml xpath xml-parsing


    【解决方案1】:

    您的 XPath 表达式将选择一个&lt;company&gt;,其中有至少一个名字为 Peter 的工作人员。

    你真正想要的是选择&lt;staff&gt;级别:

    company/staff[firstname = 'Peter']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      相关资源
      最近更新 更多