我在查找正确的XPath语法以检查XML中的特定节点是否存在时遇到了一些麻烦.我只允许使用XPath(所以没有XSL或类似的东西,它必须是纯XPath表达式语法).
我有一个XML,它有一个节点Filename但在每种情况下都不存在.如果未指定文件名,我的LiveCycle进程将使用不同的路径来填充文件名.但是如何检查Filename节点是否存在?
Ode*_*ded 16
您可以使用该count函数 - 传递您正在检查的节点的路径.
如果它们不存在,那么值count将为0:
count(//Filename) = 0
Run Code Online (Sandbox Code Playgroud)
Dim*_*hev 10
假设您有以下XML文档:
<top>
<function>
<filenamex>c:\a\y\z\myFile.xml</filenamex>
<default>Default.xml</default>
</function>
</top>
Run Code Online (Sandbox Code Playgroud)
然后这个XPath表达式选择filename元素存在default时的filename元素或未指定元素的元素:
(/*/function/filename
|
/*/function/default
)
[1]
Run Code Online (Sandbox Code Playgroud)
检查filename元素是否存在的最短方法是:
/*/function/filename
所以第一个XPath表达式可以重写为等效(但有点长):
/*/function/filename
|
/*/function/default[not(/*/function/filename)]
Run Code Online (Sandbox Code Playgroud)
小智 7
给出另一个答案的示例Xml
<top>
<function>
<filenamex>c:\a\y\z\myFile.xml</filenamex>
<default>Default.xml</default>
</function>
</top>
Run Code Online (Sandbox Code Playgroud)
我认为有必要在这里回答,因为其他答案不像XmlSpy中宣传的那样有效