使用XQuery在句子中计算逗号

时间:2013-11-06 23:20:38

标签: xml xquery

我将在前面说我是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
显然,这两个结果都是错误的。有许多不同的句子,逗号数量不等。我不明白为什么会给出那些结果。请帮帮忙?

1 个答案:

答案 0 :(得分:2)

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

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

for $arg in doc("document.xml")/text/paragraph/sentence
return (count(tokenize($arg, ',')) - 1)