我正在尝试获取最大账面价值(附加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>
我需要找到的另一件事是他们的价格高于书前书的所有书籍,我尝试了很多方法但是我可以获得下一个节点吗?
答案 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]]