不存在节点的XPath检查
我在查找正确的XPath语法以检查XML中是否存在特定节点时遇到了一些困难。我只允许使用XPath(因此没有XSL或类似的东西,它必须是纯XPath表达式语法) 我有一个XML,它有一个节点不存在节点的XPath检查,xpath,Xpath,我在查找正确的XPath语法以检查XML中是否存在特定节点时遇到了一些困难。我只允许使用XPath(因此没有XSL或类似的东西,它必须是纯XPath表达式语法) 我有一个XML,它有一个节点文件名,但它并不是在所有情况下都存在。如果未指定文件名,我的LiveCycle进程将使用不同的路径来填充文件名。但是如何检查文件名节点是否存在?您可以使用函数传递正在检查的节点的路径 如果它们不存在,则count的值将为0: count(//Filename) = 0 假设您有以下XML文档: <to
文件名
,但它并不是在所有情况下都存在。如果未指定文件名,我的LiveCycle进程将使用不同的路径来填充文件名。但是如何检查文件名节点是否存在?您可以使用函数传递正在检查的节点的路径
如果它们不存在,则count
的值将为0:
count(//Filename) = 0
假设您有以下XML文档:
<top>
<function>
<filenamex>c:\a\y\z\myFile.xml</filenamex>
<default>Default.xml</default>
</function>
</top>
(/*/function/filename
|
/*/function/default
)
[1]
检查文件名
元素是否存在的最短方法是:
<top>
<function>
<filenamex>c:\a\y\z\myFile.xml</filenamex>
<default>Default.xml</default>
</function>
</top>
(/*/function/filename
|
/*/function/default
)
[1]
/*/function/filename
因此第一个XPath表达式可以用等效的重新编写(但要长一些):
与count类似,但更直接的取决于您想要的是函数boolean
boolean(//文件名)
如果“Filename”节点存在,则返回true;如果不存在,则返回false。给出了另一个答案中的示例Xml
<top>
<function>
<filenamex>c:\a\y\z\myFile.xml</filenamex>
<default>Default.xml</default>
</function>
</top>
c:\a\y\z\myFile.xml
Default.xml
- 要获取节点为“filenamex”的节点,请使用
/top/function[filenamex]
- 要获取没有节点“filenamex”的节点,请使用
/top/function[not(filenamex)]
我觉得有必要在这里回答,因为其他答案并不像XmlSpy中宣传的那样有效。请参阅我的答案,以获得解释和一个简短的XPath表达式,该表达式在缺少文件名的情况下选择文件名或默认值。:)有点神秘的意图,嗯?