我已經在這裏待了好幾個小時了。我似乎無法得到這個權利。使用count()函數在XPath中進行模糊匹配
我有這個示例XML文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
我試圖使用XPath的count()函數返回一個值出現了多少次在文件中(返回包含該值的元素的計數)。
我目前可以使用:
count(//*[contains(author, 'J K.')])
而這回 '1',這是正確的。現在,讓我們說我不知道我正在搜索的值位於哪個元素或屬性中。如果我嘗試使用:
count(//*[contains(/*, 'J K.')])
這會返回'25',它是文件中所有節點的計數。我認爲predicate中contains函數的第一個參數指定了在哪裏查找值。然而,在這種情況下,似乎表示要返回的價值。我有點困惑。我也試過這樣:
query = "count(//*[contains(/*, 'J K.')]/book/..)";
這也帶回正確的值,但同樣,你必須知道該值所在的級別。如果你有一個更復雜的文件和多個層次的不同節點,你仍然想搜索整個文件,那麼你如何去做呢?
您的示例輸入與您提供的值不匹配。請確保包含所有相關的XML,或將您的問題與一小段但足夠大的XML(甚至更好)相匹配。例如,這應該包括超過一次的針(所有查詢'J K.'的查詢將爲該輸入產生1)。 –