xpath结果的问题

时间:2011-03-17 11:04:50

标签: xpath

我正在尝试获取最大账面价值(附加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 :(得分:0)

您使用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]

做你想做的事吗?

答案 1 :(得分:0)

使用另一种方法,您可以使用此XPath 2.0表达式:

/inventory/book[index-of(/inventory/book/price,max(/inventory/book/price))[1]]