我有一个用Java处理的SOAP响应。它具有一个带有几个不同子元素的元素。我正在使用以下代码来尝试获取所有的bond节点,并找出其中一个具有值为ACTIVE的子标记的节点。初始评估语句返回的NodeList包含4个节点,这是SOAP响应中正确的子节点数,但它们都是第一个元素的重复项。这是代码:
NodeList nodes = (NodeList)xpath.evaluate("//:bond", doc, XPathConstants.NODESET);
for(int i = 0; i < nodes.getLength(); i++){
HashMap<String, String> map = new HashMap<String, String>();
Element bond = (Element)nodes.item(i);
// Get only active bonds
String status = xpath.evaluate("//:status", bond);
String id = xpath.evaluate("//:instrumentId", bond);
if(!status.equals("ACTIVE"))
continue;
map.put("isin", xpath.evaluate(":isin", bond));
map.put("cusip", xpath.evaluate(":cusip", bond));
}
谢谢你的帮助,
杰瑞德
最佳答案
眼前一个问题的答案是,像//:status
这样的表达式将忽略您传入的节点,并从文档的根部开始。
但是,通过使用XPath将测试应用于节点,可能有比您现有的解决方案更简单的解决方案。我认为这应该起作用,尽管它可能包含错别字(特别是,我不记得text()
是否可以独立存在或必须在谓词表达式中使用):
//:bond/:status[text()='ACTIVE']/..