T.R*_*Rob 7 java xml xpath jaxp
给定一个如下所示的xml文档:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="agentType">STANDARD</entry>
<entry key="DestinationTransferStates"></entry>
<entry key="AgentStatusPublishRate">300</entry>
<entry key="agentVersion">f000-703-GM2-20101109-1550</entry>
<entry key="CommandTimeUTC">2010-12-24T02:25:43Z</entry>
<entry key="PublishTimeUTC">2010-12-24T02:26:09Z</entry>
<entry key="queueManager">AGENTQMGR</entry>
</properties>
Run Code Online (Sandbox Code Playgroud)
我想打印"key"属性和元素的值,所以它看起来像这样:
agentType = STANDARD
DestinationTransferStates =
AgentStatusPublishRate = 300
agentVersion = f000-703-GM2-20101109-1550
CommandTimeUTC = 2010-12-24T02:25:43Z
PublishTimeUTC = 2010-12-24T02:26:09Z
queueManager = AGENTQMGR
Run Code Online (Sandbox Code Playgroud)
我可以使用此代码打印节点值没有问题:
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("//properties/entry/text()");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getNodeValue());
}
Run Code Online (Sandbox Code Playgroud)
我可以通过更改xpath表达式和节点方法来打印"key"属性的值,如下所示:
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("//properties/entry");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getAttributes().getNamedItem("key").getNodeValue());
}
Run Code Online (Sandbox Code Playgroud)
似乎有一种方法可以将这两个值放在一个单一的中evaluate.我总是可以评估两个NodeLists并使用一个公共索引迭代它们,但我不确定它们是否保证以相同的顺序返回.任何建议赞赏.
Chr*_*wes 11
怎么样getTextContent()?这应该做的工作.
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++)
{
Node currentItem = nodes.item(i);
String key = currentItem.getAttributes().getNamedItem("key").getNodeValue();
String value = currentItem.getTextContent();
System.out.printf("%1s = %2s\n", key, value);
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅javadoc getTextContent().我希望这能帮到您.
| 归档时间: |
|
| 查看次数: |
26561 次 |
| 最近记录: |