【发布时间】:2016-07-19 07:51:14
【问题描述】:
我有一个 XML,它是一个事件阈值列表,我想在阈值的“名称”上获取此数据绑定,因此我可以获取特定“命名”事件阈值的关联键和值。
非工作代码:
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>
对于输出,我正在尝试迭代事件阈值,然后将“名称”与值一起作为 JSON 对象发送。例如
{
"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
所以除了调用 getTextContent() 时,我似乎从未获得过“名称”属性。
【问题讨论】: