Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不存在节点的XPath检查_Xpath - Fatal编程技术网

不存在节点的XPath检查

不存在节点的XPath检查,xpath,Xpath,我在查找正确的XPath语法以检查XML中是否存在特定节点时遇到了一些困难。我只允许使用XPath(因此没有XSL或类似的东西,它必须是纯XPath表达式语法) 我有一个XML,它有一个节点文件名,但它并不是在所有情况下都存在。如果未指定文件名,我的LiveCycle进程将使用不同的路径来填充文件名。但是如何检查文件名节点是否存在?您可以使用函数传递正在检查的节点的路径 如果它们不存在,则count的值将为0: count(//Filename) = 0 假设您有以下XML文档: <to

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

我有一个XML,它有一个节点
文件名
,但它并不是在所有情况下都存在。如果未指定文件名,我的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表达式,该表达式在缺少文件名的情况下选择文件名或默认值。:)有点神秘的意图,嗯?