从已解析的XML文档

时间:2016-12-04 12:42:30

标签: java xml xpath nodelist

给出xml片段:

<AddedExtras>
    <AddedExtra Code="1234|ABCD" Quantity="1" Supplier="BDA"/>
    <AddedExtra Code="5678|EFGH" Quantity="1" Supplier="BDA"/>
    <AddedExtra Code="9111|ZXYW" Quantity="1" Supplier="BDA"/>
    <AddedExtra Code="9188|ZXYF" Quantity="1" Supplier="BDA"/>
    <AddedExtra Code="9199|ZXYG" Quantity="1" Supplier="BDA"/>
</AddedExtras>

以下代码片段将上述xml作为已解析的文档读入,并使用xpath表达式提取“代码”。属性:

public String getNodeValuesFromNodeList(Document doc, String expression){

NodeList nodeList = null;
    try {
        nodeList = (NodeList) xpath.compile(expression).evaluate(doc, XPathConstants.NODESET);
    } catch (XPathExpressionException e) {
        e.printStackTrace();
    }

    return nodeList.toString();
}

返回的列表是一个Object(org.apache.xml.dtm.ref.DTMNodeList@58cf8f94)而不是字符串列表 - 如何返回nodeList,使其返回以下字符串列表:< / p>

    Code="1234|ABCD
    Code="5678|EFGH
    Code="9111|ZXYW
    Code="9188|ZXYF
    Code="9199|ZXYG

那么,我怎样才能只返回前2个(作为例子)?

1 个答案:

答案 0 :(得分:2)

如果您的XPath表达式选择属性,并且您想要属性的值,那么您可以使用类似于以下的循环:

    List<String> codes = new ArrayList<>();
    for (int i = 0; i < nodeList.getLength(); ++i) {
        Attr attr = (Attr)nodeList.item(i);
        codes.add(attr.getValue());
    }