【问题标题】:Return string values of NodeList from a parsed XML doc从解析的 XML 文档返回 NodeList 的字符串值
【发布时间】:2016-12-04 12:42:29
【问题描述】:

给定xml sn-p:

<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>

下面的 sn-p 将上述 xml 读取为已解析的 doc,并使用 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();
}

返回的列表是一个对象 (org.apache.xml.dtm.ref.DTMNodeList@58cf8f94) 而不是字符串列表 - 我如何返回 nodeList 以便它返回以下字符串列表:

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

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

【问题讨论】:

    标签: java xml xpath nodelist


    【解决方案1】:

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

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

    【讨论】:

    • 要从列表中获取前两项,您可以执行代码.sublist(0, 2)
    • 什么是属性?我没有那个对象并得到一个错误。
    • @user2568374:它是org.w3c.dom.Attr
    猜你喜欢
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多