XML获取特定属性上的节点值

时间:2014-03-03 22:24:55

标签: java xml xml-parsing

我知道有很多链接,但我找不到解决方案。根据我的搜索,我提出了一些代码:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xml));

Document doc = builder.parse(is);
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();

XPathExpression expr = xpath.compile("//Field[@Name=\"id\"]");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
System.out.println(nl.getLength());
for(int i=0;i<nl.getLength();i++){
    Node currentItem = nl.item(i);
    String key = currentItem.getAttributes().getNamedItem("Name").getNodeValue();
    System.out.println(key);
}

这是我的xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Entity Type="test-folder">
<Fields>
<Field Name="item-version"/>
<Field Name="id">
    <Value>5386</Value>
</Field>
<Field Name="ver-stamp">
    <Value>2</Value>
</Field>
<Field Name="parent-id">
    <Value>5310</Value>
</Field>
<Field Name="system">
    <Value>A</Value>
</Field>
<Field Name="last-modified">
    <Value>2014-03-03 16:35:24</Value>
</Field>
<Field Name="description">
    <Value/>
</Field>
<Field Name="hierarchical-path">
    <Value>AAAAAPAADAACADC</Value>
</Field>
<Field Name="view-order">
    <Value>0</Value>
</Field>
<Field Name="name">
    <Value>TC77</Value>
</Field>
<Field Name="attachment">
    <Value/>
</Field>
</Fields>

我想获得“Field Name ='id'”的值5386.很抱歉,如果我只是重新发布这个但我真的无法得到答案。

2 个答案:

答案 0 :(得分:1)

您的代码正在获取名称属性等于“Id”的Field节点。您可以更改XPath表达式以获取name属性为“Id”的元素的Value节点内的元素文本。所以XPath表达式应该是:

//Field[@Name=\"id\"]/Value/text()

然后将for循环中的代码更改为

        Node currentItem = nl.item(i);
        System.out.println(currentItem.getNodeValue());

答案 1 :(得分:1)

此XPath将找到正确的Value元素://Field[@Name="id"]/Value

您还可以通过表达式string(//Field[@Name="id"]/Value)获取XPath以返回元素的连接文本内容,这可能是最简单的方法。请注意,在这种情况下,您应该直接从expr.evaluate返回一个字符串,而不是NodeList。