【发布时间】: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) <=2">more than 1 sibling</sch:assert>
</sch:rule>
</sch:pattern>
但这不起作用。
【问题讨论】:
-
为什么是
&lt;=2而不是&gt;=2? -
我发现这是一种奇怪的方法,可能缺少上下文...但是您为什么不选择
context="section/body"然后将 XPath 表达式转换为count(./p) &gt;=2(或任何您想)。following-sibling::p只计算<p>元素的兄弟姐妹,这意味着如果中间有<div>标签,它会打乱计数。除非那是你真正想要的...... -
Schematron 实现 (probatron) 返回断言失败的上下文,这就是为什么我使用 section/body/p 来获取实际 p 标记的 XPath。我只想要 2 个以上的 body 标签下的 p 标签,那么它应该返回额外 p 标签的 XPath
标签: xml xpath schematron