【问题标题】:How to get the number of elements in XPath如何获取 XPath 中的元素个数
【发布时间】:2017-01-23 14:40:33
【问题描述】:

我已经开始使用 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> 

但这不起作用。

【问题讨论】:

  • 为什么是&amp;lt;=2 而不是&amp;gt;=2
  • 我发现这是一种奇怪的方法,可能缺少上下文...但是您为什么不选择 context="section/body" 然后将 XPath 表达式转换为 count(./p) &amp;gt;=2 (或任何您想)。 following-sibling::p 只计算 &lt;p&gt; 元素的兄弟姐妹,这意味着如果中间有 &lt;div&gt; 标签,它会打乱计数。除非那是你真正想要的......
  • Schematron 实现 (probatron) 返回断言失败的上下文,这就是为什么我使用 section/body/p 来获取实际 p 标记的 XPath。我只想要 2 个以上的 body 标签下的 p 标签,那么它应该返回额外 p 标签的 XPath

标签: xml xpath schematron


【解决方案1】:

这会报告,如果 &lt;p&gt; 元素的后续兄弟 &lt;p&gt; 元素少于 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>

【讨论】:

    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 2020-08-04
    • 2021-06-19
    • 2017-08-20
    • 2022-08-17
    • 2016-09-30
    • 1970-01-01
    • 2014-10-17
    相关资源
    最近更新 更多