xpath не работает в Java - PullRequest
0 голосов
/ 04 июня 2018

У меня есть приведенная ниже строка xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Structure>
   <LongUnsigned value="142794"/>
   <OctetString value="07E2051E030F1E0404800000"/>
   <Structure>
      <OctetString value="07E2051E030F1E0404800000"/>
      <OctetString value="66574536387"/>
      <Array>
         <Structure><OctetString value="0000000000000001"/><OctetString value="9889892347"/></Structure>
         <Structure><OctetString value="00098347586768574"/><OctetString value="6283046502"/></Structure>
         <Structure><OctetString value="0000011000000001"/><OctetString value="899734729847586"/></Structure>
      </Array>
   </Structure>
</Structure>

Я использую приведенный ниже xpath, но он всегда возвращает пустую строку.

        XPath xPath = XPathFactory.newInstance().newXPath();
        try {
            String eval = xPath.evaluate("//Structure/Structure/Array", new InputSource(new StringReader(xmlString)));
            System.out.println("Eval:" + eval);
        } catch (XPathExpressionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

Я пытался запустить этот xpath в сети, и кажется,работать просто отлично.Чего мне не хватает в Java, так это того, что он работает не так, как ожидалось.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Ваше выражение XPath выбирает узел элемента, а не строку.Поэтому вам нужно запросить результат, который будет возвращен как NODESET.

0 голосов
/ 04 июня 2018

Я не знаком с Java, читающим XML, но ваш XPath должен выглядеть примерно так:

/Structure/Structure/Array/Stucture/OctetString/@value

Это начнется с корневого узла <Structure>, опустится до вложенного <Structure>, далее до <Array>, затем к вложенным элементам <OctetString> для извлечения их атрибута value.

Ваше выражение //Structure/Structure/Array начинается с any <Structure> (из-за //) и пытается прочитать значение <Array>, но нет значения, просто более глубокие узлы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...