我有一个XML,它是一个事件阈值列表,我希望这个数据绑定在" name"阈值,所以我可以获得特定"命名"的关联键和值。事件阈值。
非工作代码:
NodeList events = (NodeList) xpath.evaluate("event/event-thresholds/name/text()", data, XPathConstants.NODESET);
for (Node event : asList(events)) {
logger.info("Event: " + event.getParentNode().getNodeName() + ":" + event.getNodeValue());
NodeList e2 = (NodeList) xpath.evaluate("event[event-thresholds/@name = " + event.getNodeValue() + "]/text()", data, XPathConstants.NODESET);
for (Node e : asList(e2)) {
logger.info(e.getTextContent());
}
}
我有以下XML:
<event>
<event-thresholds>
<name>bind-count</name>
<set-value>800</set-value>
<clear-value>600</clear-value>
<set-percentage>80</set-percentage>
<clear-percentage>60</clear-percentage>
</event-thresholds>
<event-thresholds>
<name>spool-usage</name>
<set-value>3200</set-value>
<clear-value>2400</clear-value>
<set-percentage>80</set-percentage>
<clear-percentage>60</clear-percentage>
</event-thresholds>
<event-thresholds>
</event>
对于输出,我试图迭代事件阈值,然后发送&#34;名称&#34;以及作为JSON对象的值。 e.g。
{
"name": "spool-usage",
"data": {
"set-value": 3200,
"clear-value": 1000,
...
}
}
更新:
NodeList events = (NodeList) xpath.evaluate("event/event-thresholds[name]", data, XPathConstants.NODESET);
for (Node event : asList(events)) {
logger.info(event.getUserData("name"));
logger.info(event.getFirstChild().getNodeName());
logger.info(event.getFirstChild().getNodeValue());
logger.info(event.getNodeName());
logger.info(event.getNodeValue());
logger.info(event.getLocalName());
logger.info(event.getTextContent());
}
收率:
5983 INFO com.deblox.smg.QueueHandler:132 - NULL
5984 INFO com.deblox.smg.QueueHandler:133 - #text
5984 INFO com.deblox.smg.QueueHandler:134 -
5984 INFO com.deblox.smg.QueueHandler:135 - event-thresholds
5984 INFO com.deblox.smg.QueueHandler:136 - NULL
5984 INFO com.deblox.smg.QueueHandler:137 - NULL
5984 INFO com.deblox.smg.QueueHandler:138 -
bind-count
800
600
80
60
所以我似乎永远不会得到&#34;名字&#34;除了调用getTextContent()时的属性。
答案 0 :(得分:0)
你的XPath查询应该是这样的
event/event-thresholds[name]
,您将获得event-thresholds
节点。
您可以在此链接上看到示例: http://viralpatel.net/blogs/java-xml-xpath-tutorial-parse-xml/ 见第3.4节
答案 1 :(得分:0)
NodeList nodeList = (NodeList) xPath.compile("//event-thresholds").evaluate(data, XPathConstants.NODESET);
for (int i=0; i<nodeList.getLength(); ++i) {
Node node = nodeList.item(i);
NodeList childNodes = node.getChildNodes();
for (int j=0; j<childNodes.getLength(); ++j) {
Node child = childNodes.item(j);
System.out.println(child.getNodeName() + " - " + child.getTextContent());
}
}