XPath检查不存在的节点

Ron*_*176 17 xpath

我在查找正确的XPath语法以检查XML中的特定节点是否存在时遇到了一些麻烦.我只允许使用XPath(所以没有XSL或类似的东西,它必须是纯XPath表达式语法).

我有一个XML,它有一个节点Filename但在每种情况下都不存在.如果未指定文件名,我的LiveCycle进程将使用不同的路径来填充文件名.但是如何检查Filename节点是否存在?

Ode*_*ded 16

您可以使用该count函数 - 传递您正在检查的节点的路径.

如果它们不存在,那么值count将为0:

count(//Filename) = 0
Run Code Online (Sandbox Code Playgroud)


小智 15

类似于count但可能更直接,取决于你想要的是函数boolean

boolean(//Filename)

如果存在"Filename"节点,则返回true,否则返回false.


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)
  • 要获取带节点"filenamex"的节点,请使用/ top/function [filenamex]
  • 要获取没有节点"filenamex"的节点,请使用/ top/function [not(filenamex)]

我认为有必要在这里回答,因为其他答案不像XmlSpy中宣传的那样有效