xquery-在单个父级中获取非空的那些元素的计数

Arv*_*ind 5 xquery

请考虑以下XML--

<div id="test">
    <p> Text sihdfaif</p>
    <p />
    <p> Text sihdfaif</p>
    <p />
    <p> Text sihdfaif</p>
    <p> Text sihdfaif</p>
    <p> Text sihdfaif</p>
</div>
Run Code Online (Sandbox Code Playgroud)

现在,我想获得其中包含一些文本的p元素的数量..在这种情况下,该值= 5(有2个'p'元素为空)

这是我想出的XQuery--

    let $claims_main := $doc//div[@id="test"]
        let $claims := $doc//div[@id="test"]/p
        let $n := count($claims)
        where $claims_main/p != '' 
        return $n
Run Code Online (Sandbox Code Playgroud)

然而,我从上面得到的结果是7,即包括空的'p'元素.

我想到的另一种方法是在所有'p'元素上使用for循环,但在这种情况下如何检索循环元素的总数?如果我在这种情况下使用计数,那么我只需得到[1,1,1,1,1] - 即.每个p元素的计数(因为在for循环中,计数将是每个'p'元素,而不是div本身)...

Dim*_*hev 8

由于问题专门针对" p其中包含一些文本的元素",这里是如何获得精确这些p元素的数量:

count(/*/div/p[string(.)])
Run Code Online (Sandbox Code Playgroud)

这将生成p具有非空字符串值的所有元素的数量,即元素div的子元素是XML文档的顶部元素的子元素.

另外,如果"非空"也意味着只有非空白字符串值:

count(/*/div/p[normalize-space(.)])
Run Code Online (Sandbox Code Playgroud)