【问题标题】:xquery- getting count of those elements, within a single parent, which are not emptyxquery-获取单个父项中不为空的那些元素的计数
【发布时间】:2012-09-16 10:54:39
【问题描述】:

请考虑以下 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>

现在,我想获取其中包含一些文本的 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

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

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

【问题讨论】:

    标签: xquery


    【解决方案1】:

    由于问题专门针对“p 元素中包含一些文本”,以下是如何准确获取此类 p 元素的数量:

    count(/*/div/p[string(.)])
    

    这会产生具有非空字符串值的所有p 元素的数量,它们是div 的子元素,div 是 XML 文档顶部元素的子元素。

    此外,如果“非空”也意味着具有非纯空白字符串值

    count(/*/div/p[normalize-space(.)])
    

    【讨论】:

      【解决方案2】:

      试试这个:

      count($doc//div[@id='test']/p[node()])
      

      第二个谓词[node()]只选择包含子节点的元素,相当于[./node()]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-03
        • 1970-01-01
        相关资源
        最近更新 更多