我知道有很多链接,但我找不到解决方案。根据我的搜索,我提出了一些代码:
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.很抱歉,如果我只是重新发布这个但我真的无法得到答案。
答案 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。