XPath检查不存在的节点

时间:2010-07-23 09:40:54

标签: xpath

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

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

4 个答案:

答案 0 :(得分:16)

您可以使用count函数 - 传入您正在检查的节点的路径。

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

count(//Filename) = 0

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

我觉得有必要在这里回答,因为其他答案没有像XmlSpy中宣传的那样起作用