[英]Counting ocurrences of certain words case-insensitive in an XML element
以下是XML文件的結構 -
<Datas>
<Data>
<Name>Information</Name>
<Desc>Today is Monday, the starting day of the week.</Desc>
</Data>
<Data>
<Name>Stackoverflow.com</Name>
<Desc>Yesterday 1200 questions were posted. <b>TODAY</b>, till now 1300 questions are posted. So, today will be an important day for all the senior members.</Desc>
</Data>
</Datas>
在上面的XML中,我想計算today
單詞的出現次數。 這個詞可以是任何格式,如Today
, today
, TODAY
或者toDay
。 最后一個是不正確的,但如果用戶輸入這樣的話,就不應該錯過。
我正在使用查詢 -
count(/Datas/Data[contains(translate(Desc,'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXY'), 'TODAY')])
這是結果2,但總共有3個!! 如何包括所有?
這一個計為3:
count(/Datas/Data//text()/tokenize(upper-case(.), "[\P{L}]")[. = "TODAY"])
它使用fn:大寫用於大小寫標准化,而fn:tokenize用於隔離單詞。 請注意,此處的單詞需要用非字母分隔,這些字母的行為與使用fn:contains的原始查詢不同。 但這可能就是你想要的。
如果你正在使用BaseX(你記得那么),你可以使用非標准的ft:count
,這會讓生活變得更輕松。
ft:count(//*[text() contains text "today"])
另外一個好處是,此查詢將能夠使用全文索引,這將比為每個查詢標記文檔快得多。 請記住設置全文索引而不大寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.