Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
独占XPath测试_Xpath_Schematron - Fatal编程技术网

独占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

我正在尝试编写一个Schematron规则来执行以下测试

如果根目录下没有包含“abc”且根目录下包含标题“def”的li,则报告

我遇到的问题是,我得到了很多误报。这是我当前的XPath

<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?谢谢!这正是我需要的。我想我已经改变了一些逻辑。回答正确@杰夫很高兴能帮上忙。幻影巨石!