帮助XPath查询(计数)

时间:2011-09-02 12:24:48

标签: xpath xquery

我想计算某个节点的所有后代或自身节点,但只是所有后代都低于从0开始的某个级别。你有什么建议吗?

基本上看起来像是:

count(//fstructure/node()) + count(//fstructure/node()/node()) + count(//fstructure/node()/node()/node()) + 1

适用于3个级别和(元素)节点“fstructure”,即使它不是很好,但我只需要它进行调试。

最好的问候,
约翰内斯

1 个答案:

答案 0 :(得分:2)

此XPath表达式

   count(
    ExprForYourNode//*
                    [not(count(ancestor::* )
                        >
                         count(ExprForYourNode/ancestor::*) + 2
                         )
                    ]
         )

从表达式ExprForYourNode选择的元素中选择所有后代或自我元素,最大深度为2(基于零)

如果要选择所有后代或自节点(元素,文本节点,注释节点和处理指令节点),请使用

   count(
    ExprForYourNode//node()
                     [not(count(ancestor::* )
                         >
                          count(ExprForYourNode/ancestor::*) + 2
                          )
                     ]
         )

例如,使用此文档

<t>
 <a>
  <b>
    <c>
      <d/>
    </c>
  </b>
 </a>
</t>

此表达

   count(
    /*/a//*
           [not(count(ancestor::* )
                >
                count(/*/a/ancestor::*) + 2
                )
           ]
          )

<强>产生

2

这是(bc但不是d)的元素数量,它们是a的后代,相对深度为a 2或以下。

同样,评估此表达式

   count(
    /*/a//node()
           [not(count(ancestor::* )
                >
                count(/*/a/ancestor::*) + 2
                )
           ]
         )

<强>产生

6

这是元素的数量(如前所述)加上相对于元素a的深度为2的(仅限空白)文本节点的数量