0

我先说我是 XQuery 的新手。话虽如此,我正在从事一个使用 XML 来构造文本的项目。所以我的文档看起来像这样:

<text>
 <paragraph>
   <sentence id="1"> This, is a sentence.</sentence>
   <sentence id="2"> This, is, a sentence.</sentence>
   <sentence id="3"> This, is, a, sentence.</sentence>
   <sentence id="4"> This is a sentence.</sentence>
 </paragraph>
</text>

我需要计算每个句子的逗号数以进行下游语言分析。我试过这样做:

let $comma := "&#44;"

for $arg in doc("document.xml")/text/paragraph/sentence

return count($arg//$comma)

我使用的是 Oxygen 14.0,XQuery 编辑器没有给我任何语法错误消息。当我运行它时,我得到一个结果,但显然是错误的:

2 2 2 2

我将返回行修改为此(因为我不明白 // 和 / 之间的区别并想尝试一些东西):

return count ($arg/$comma)

现在结果是:

1 1 1 1

显然,这两个结果都是错误的。有许多不同的句子,带有不同数量的逗号。我不明白为什么它会给出这些结果。请帮忙?

4

1 回答 1

2

将字符串附加到位置路径不会执行对该字符串的子字符串搜索。但是,可以在 XPath 表达式中使用函数来处理字符串。

解决此问题的一种方法是在 中使用逗号作为分隔符参数fn:tokenize,并返回比标记数少一的值:

for $arg in doc("document.xml")/text/paragraph/sentence
return (count(tokenize($arg, ',')) - 1)
于 2013-11-06T23:22:35.820 回答