独占XPath测试
我正在尝试编写一个Schematron规则来执行以下测试 如果根目录下没有包含“abc”且根目录下包含标题“def”的li,则报告 我遇到的问题是,我得到了很多误报。这是我当前的XPath独占XPath测试,xpath,schematron,Xpath,Schematron,我正在尝试编写一个Schematron规则来执行以下测试 如果根目录下没有包含“abc”且根目录下包含标题“def”的li,则报告 我遇到的问题是,我得到了很多误报。这是我当前的XPath <rule context="li"> <assert test="not(contains(text(),'abc')) and ancestor::root/descendant::title = 'def'">Report this.</as
<rule context="li">
<assert test="not(contains(text(),'abc')) and ancestor::root/descendant::title = 'def'">Report this.</assert>
</rule>
报告这件事。
我的输出结果是报告每个不包含“abc”的li,我理解这一点,因为它正在测试每个li并报告
但是,我不知道如何编写XPath,以便测试任何li是否包含“abc”
谢谢 问题是,正如您所暗示的,您已经在Schematron中将其表示为适用于每个
li
元素的规则;而您用英语描述的规则适用于每个根元素
所以你可以把它表达为
<rule context="root">
<assert test=".//li[contains(text(),'abc')] or
not(.//title = 'def')">Report this.</assert>
</rule>
报告这件事。
请注意,为了符合您的英语描述,我已经改变了测试的意义
如果根目录下没有包含“abc”且根目录下包含标题“def”的li,则报告
由于您使用的是
元素,因此断言的内容与您想要报告的内容相反。使用
元素可能更有意义:
<rule context="root">
<report test="not(.//li[contains(text(),'abc')]) and
.//title = 'def'">Report this.</report>
</rule>
报告这件事。
能否显示误报的示例XML?谢谢!这正是我需要的。我想我已经改变了一些逻辑。回答正确@杰夫很高兴能帮上忙。幻影巨石!