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

2

Так что мне дали задание в моем университете по «исправлению» XPath и получить его, чтобы вернуть узлы в правильном порядке.

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

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

  1. Find the method in the XPath jar that sorts the nodes and delete it - problem is i dont know if its possible to see the XPath jar code , and didnt find it online.- if you can point me to it , that would be great !

  2. Ive found this option which looks like it should do the trick http://cafeconleche.org/books/xmljava/chapters/ch16s06.html
    but it demands dom implementation of XPath 3.0 and i cant find that dom anywhere - any idea if there is such thing ?

  3. If you have any other idea i would love to hear !

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

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

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

Книга1 book2

инстед из:

book2 Книга1

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

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

Какиеis правильный порядок? Если вы имеете в виду отсортировано, не могли бы выuse XSLT? Greg Inozemtsev
Точка занята, все изменения внесены. :) Drau
Добавил пример. Я могу использовать что-нибудь, пока я пишу это в коде Java, который я не понял, как может помочь XSLT? Drau
XSLT может создать документ с узлами, отсортированными в любом порядке. Но насколько я могу сказать, вы просто всегда хотите изменить порядок? Greg Inozemtsev
Мне нужен порядок в соответствии с выражением, которое я оцениваю. Мой ввод - это файл xml. Я не знаю структуру файла, я не могу изменить его на XSLT. Drau

Ваш Ответ

1   ответ
3

В 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)
@yedidyak: Если у вас есть проблема, тогда начните новый вопрос, который объясняет проблему.
Извини за это. Если кто-то попросит помощи в ремонте газового котла, то перед тем, как ответить на вопрос, я попытаюсь выяснить, стоит ли ему советовать выполнить эту задачу. Конечно, у меня не так много дел, поэтому я вполне могу ошибиться.
Есть несколько продуктов, которые реализуют XQuery 1.0 или XPath 2.0 для Java, одним из которых является Saxon. Как и Димитр, я предлагаю вам немного прочитать спецификацию, прежде чем задавать какие-либо подробные вопросы; он очень мощный
@Drau: Одна из возможностей - получить Saxon, единственным разработчиком которого является Майкл Кей. И, конечно же, получите хорошую книгу по XPath 2.0 и начните обучение.
Хорошо, а как я могу перейти на XPath 2.0 / XQuery 1.0? Где я могу найти банку? Искал уже. это будет также работать на сложные выражения? или только знает, как поменять порядок узлов? (1,2,3,4,5 в 5,4,3,2,1) Drau

Похожие вопросы