проблема с результатами xpath - PullRequest
0 голосов
/ 17 марта 2011

я пытаюсь получить максимальную балансовую стоимость (прилагается dtd), но я могу получить только значение, а не сам узел я использовал эту команду

max(//price)

но я получил значение, а не узел.

это dtd

<!ELEMENT iventory (book)+>
<!ELEMENT book (title,author+,publisher+,price,chapter*)>
<!ATTLIST book num ID #REQUIRED>
<!ELEMENT chapter (title,(paragraph*|section))>
<!ELEMENT section (title?,paragraph*)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST price  currency  CDATA #FIXED "usd">
<!ELEMENT paragraph (#PCDATA|emph|image)*>
<!ELEMENT emph (#PCDATA)>
<!ELEMENT image EMPTY>
<!ATTLIST image file CDATA #REQUIRED
            height CDATA #IMPLIED
            width  CDATA #IMPLIED>

еще одна вещь, которую мне нужно найти, - это все книги, цена которых выше, чем книга предшествующей книги, я пробовал много способов, но как мне получить следующий узел?

Ответы [ 2 ]

0 голосов
/ 17 марта 2011

При другом подходе вы можете использовать это выражение XPath 2.0:

/inventory/book[index-of(/inventory/book/price,max(/inventory/book/price))[1]]
0 голосов
/ 17 марта 2011

Используете ли вы XPath 1.0 или 2.0? max - это XPath 2.0, не так ли? И часто реализации XPath 2.0 также поддерживают XQuery 1.0, так что вы можете просто сделать

let $max-price := max(/inventory/book/price)
return /inventory/book[price = $max-price]

чтобы получить те или иные элементы книги, имеющие максимальную цену.

Если вам нужно использовать чистый XPath 2.0, тогда, конечно,

/inventory/book[price = max(../book/price)]

следует сделать, это может быть неэффективно.

Что касается вашего второго вопроса,

/inventory/book[price > preceding-sibling::book[1]/price]

делай что хочешь?

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