1

以下是 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 中,我想计算 word 的出现次数today。该单词可以是任何格式,例如- Today、或。最后一个是不正确的,但如果用户这样输入,则不应错过。todayTODAYtoDay

我正在使用查询 -

count(/Datas/Data[contains(translate(Desc,'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXY'), 'TODAY')])

这是结果 2,但总共有 3 个!如何包括所有?

4

2 回答 2

2

这个算3:

count(/Datas/Data//text()/tokenize(upper-case(.), "[\P{L}]")[. = "TODAY"])

它使用fn:upper-case进行大小写规范化,并使用fn:tokenize来隔离单词。请注意,此处的单词需要用非字母分隔,这与使用fn:contains的原始查询的行为不同。不过,这可能是您想要的。

于 2012-08-06T08:19:32.153 回答
1

如果您使用的是 BaseX(我记得您就是这样),您可以使用非标准的ft:count,这让生活更轻松。

ft:count(//*[text() contains text "today"])

额外的好处是该查询将能够使用全文索引,这将比为每个查询标记文档要快得多。请记住设置没有大写的全文索引。

于 2012-08-06T08:24:50.053 回答