Xml 如何获取XPath中的元素数

Xml 如何获取XPath中的元素数,xml,xpath,schematron,Xml,Xpath,Schematron,我从Schematron和XPath开始。在Schematron文档中,我提供了验证m业务规则的上下文,因此我提供了section/body/p。由于我在上下文中提供了p标记,那么我如何查询以计算p标记的总数?这是XML文件 <section> <body> <p> <t>Document Body</t> </p> <p>

我从Schematron和XPath开始。在Schematron文档中,我提供了验证m业务规则的上下文,因此我提供了section/body/p。由于我在上下文中提供了p标记,那么我如何查询以计算p标记的总数?这是XML文件

  <section>
    <body>
        <p>
            <t>Document Body</t>
        </p>
        <p>
            <t>Document Body</t>
        </p>
        <p>
            <t>Document Body</t>
        </p>
    </body>
</section>


文件正文

文件正文

文件正文

这就是我所质疑的

 <sch:pattern name="ELEMENT_LIMIT">
    <sch:rule context="section/body/p" >
        <sch:assert test="count(.//following-sibling::p) &lt;=2">more than 1 sibling</sch:assert>
    </sch:rule> 
 </sch:pattern> 

超过1个兄弟姐妹

但是这不起作用。

如果一个
元素的以下同级
元素少于2个,则此报告将进行报告

<sch:pattern id="too-many-following-siblings">
    <sch:rule context="p">
        <sch:report test="count(following-sibling::p) lt 2">
            Less than 2 following-sibling &lt;p&gt; elements.
        </sch:report>
    </sch:rule>
</sch:pattern>

少于2个以下同级p元素。

为什么
=2
而不是
=2
?我发现这是一种奇怪的方法,可能缺少上下文。。。但是为什么不选择
context=“section/body”
,然后将XPath表达式设置为
count(./p)=2
(或者任何您想要的)<代码>跟随兄弟::p<代码>只计算兄弟姐妹的代码:<代码> 元素,这意味着如果在中间有一个<代码> <代码>标签,它会把计数弄乱。除非这是您真正想要的…Schematron实现(probatron)返回断言失败的上下文,这就是我使用section/body/p获取实际p标记的XPath的原因。我只想在大于2的body标记下有2个p标记,然后它应该返回额外p标记的XPath