我正在尝试编写可以从“搜索”节点读取信息并使用它执行搜索的 Xpath 语句 (1.0)。
我取得了一些不错的进展,但偶然发现了一个问题,即如果属性(用于搜索中的值)为空或不存在,则会失败。
编辑代码以简化示例:
所以这是我的示例 XML:
<xml>
<files>
<file name="foo" description="" rating="4"/>
<file name="food" description="" rating="4"/>
<file name="foobar" description="" rating="3"/>
<file name="bar" description="" rating="3"/>
<file name="barter" description="" rating="3"/>
<file name="barterer" description="" rating="2"/>
</files>
<searches>
<search id="1">
<exclude>
<file term="foo"/>
</exclude>
</search>
</searches>
</xml>
和工作 XPATH:
//files/file[
not(contains(@name, //search[@id='1']/exclude/file/@term))
]
它按预期工作......
但是,如果预期的属性丢失或为空,它将无法工作。我认为因为: contains(@attrib, "") 出于某种原因匹配所有内容,因此如果属性为 "" 或不存在,则 not() 将始终不匹配任何内容。
例如,如果我将 XML 的排除片段更改为此它会失败:
<exclude>
<file term=""/>
</exclude>
也有这个:
<exclude></exclude>
有没有办法检查空值而不执行选择?或者是否有更好的方式来构建逻辑。请记住,我不能在 Xpath2.0 中使用 Conditionals 或其他函数。