我在查找正确的XPath语法以检查XML中的特定节点是否存在时遇到了一些麻烦。我只允许使用XPath(所以没有XSL或类似的东西,它必须是纯XPath表达式语法)。
我有一个XML,它有一个节点Filename
但在每种情况下都不存在。如果未指定文件名,我的LiveCycle进程将使用不同的路径来填充文件名。但是,如何检查Filename
节点是否存在?
答案 0 :(得分:16)
答案 1 :(得分:15)
类似于计数,但可能更直接,取决于你想要的是函数布尔
boolean(//Filename)
如果存在“Filename”节点,则返回 true ,如果不存在,则返回 false 。
答案 2 :(得分:10)
假设您有以下XML文档:
<top>
<function>
<filenamex>c:\a\y\z\myFile.xml</filenamex>
<default>Default.xml</default>
</function>
</top>
然后此XPath表达式选择filename
元素(如果存在)或default
元素(如果未指定filename
元素):
(/*/function/filename
|
/*/function/default
)
[1]
检查filename
元素是否存在的最短方法是:
/*/function/filename
所以第一个XPath表达式可以用等效的重写(但有点长):
/*/function/filename
|
/*/function/default[not(/*/function/filename)]
答案 3 :(得分:7)
给出另一个答案中的示例Xml
<top>
<function>
<filenamex>c:\a\y\z\myFile.xml</filenamex>
<default>Default.xml</default>
</function>
</top>
我觉得有必要在这里回答,因为其他答案没有像XmlSpy中宣传的那样起作用