我将在前面说我是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 := ","
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
显然,这两个结果都是错误的。有许多不同的句子,逗号数量不等。我不明白为什么会给出那些结果。请帮帮忙?
答案 0 :(得分:2)
将字符串附加到位置路径不会对该字符串执行子字符串搜索。但是,functions可以在XPath表达式中用于处理字符串。
解决此问题的一种方法是在fn:tokenize
中使用逗号作为分隔符参数,并返回少于令牌数量的参数:
for $arg in doc("document.xml")/text/paragraph/sentence
return (count(tokenize($arg, ',')) - 1)