Запрос XPath возвращает дубликаты узлов - PullRequest
0 голосов
/ 12 мая 2011

У меня есть SOAP-ответ, который я обрабатываю на Java. У него есть элемент с несколькими различными дочерними элементами. Я использую следующий код, чтобы попытаться захватить все узлы связи и найти, какой из них имеет дочерний тег со значением 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));   
}

Спасибо за вашу помощь, Джаред

1 Ответ

1 голос
/ 12 мая 2011

Ответ на ваш ближайший вопрос заключается в том, что выражения типа //:status будут игнорировать узел, который вы проходите, и начинаться с корня документа.

Однако, возможно, есть более простое решение, чем у вас, с помощью XPath для применения теста к узлу. Я думаю, что это должно работать, хотя может содержать опечатки (в частности, я не могу вспомнить, может ли text() стоять самостоятельно или должен использоваться в выражении предиката):

//:bond/:status[text()='ACTIVE']/..
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...