Возврат XPath правильного порядка (вставлен в порядок документов)

Так что в моем университете мне дали задание "исправить" XPath и заставить его возвращать узлы в правильном порядке.

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

Я подумал о нескольких идеях, но мне нужна помощь, чтобы воплотить их в жизнь:)

  1. Найдите в банке XPath метод, который сортирует узлы и удалите его - проблема в том, что я не знаю, возможно ли увидеть код jar XPath, и не нашел его в Интернете. Если вы можете указать мне на это, это было бы здорово!

  2. Я нашел эту опцию, которая выглядит так, как будто она должна помочь http://cafeconleche.org/books/xmljava/chapters/ch16s06.html
    но это требует от меня реализации XPath 3.0, и я не могу найти этот дом в любом месте - есть идеи, если есть такая вещь?

  3. Если у вас есть другие идеи, я хотел бы услышать!

Например: для этого xml

 <library> 
 <book name="book1"> 
  hello 
 </book> 
 <book name="book2"> 
  world 
 </book>
 <book name="book3">
  !!! 
 </book>
 </library>

и это выражение: / библиотека / книга [3]/ предыдущий-брат:: книга я получаю

book1 book2

инстед из:

book2 book1

Я могу использовать что угодно, если я делаю это в Java-программе

Спасибо за твою помощь:)

1 ответ

Решение

В XPath 1.0 нет последовательностей узлов, только наборы узлов. Спецификация XPath 1.0 не определяет порядок узлов в наборе узлов. Многие API также не определяют его, но неизменно они возвращают узлы в наборе узлов в порядке документов - не потому, что этого требует XPath, а потому, что этого требует XSLT, а XSLT установил ожидания того, как должны работать механизмы XPath.

Если вы хотите, чтобы последовательности узлов контролировали порядок, вам нужно перейти на XPath 2.0 (или XQuery 1.0, который является надмножеством XPath 2.0). В XPath 2.0 следующее выражение возвращает то, что вы хотите:

reverse(/library/book[3]/preceding-sibling::book)
Другие вопросы по тегам