Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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/xpath/2.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
Xml xpath查找具有可选属性的节点_Xml_Xpath - Fatal编程技术网

Xml xpath查找具有可选属性的节点

Xml xpath查找具有可选属性的节点,xml,xpath,Xml,Xpath,我想在多个XML文件中搜索具有可选属性的节点。缺少我要查找的属性的文件没有声明它所属的命名空间。我正在使用一个简单的XPath进行搜索,如下例所示: 这里我感兴趣的是节点的其他属性: 我使用XPath/@optional:other_属性来匹配它。但是,尝试在以下文件中执行相同操作时: 搜索失败,因为在第二个示例文件中未声明命名空间optional。有没有办法使用Xpath语法对属性进行条件搜索?如果我理解正确,最简单的方法是将表达式切换到local-name()。带着表情 //*[@*

我想在多个XML文件中搜索具有可选属性的节点。缺少我要查找的属性的文件没有声明它所属的命名空间。我正在使用一个简单的XPath进行搜索,如下例所示:

这里我感兴趣的是
节点的
其他属性


我使用XPath
/@optional:other_属性来匹配它。但是,尝试在以下文件中执行相同操作时:



搜索失败,因为在第二个示例文件中未声明命名空间
optional
。有没有办法使用Xpath语法对属性进行条件搜索?

如果我理解正确,最简单的方法是将表达式切换到
local-name()
。带着表情

//*[@*/local-name()="other_attribute"]
将在第一个示例中选择正确的节点,而在另一个示例中不选择任何节点。

这应该有效

//@*[name()="optional:other_attribute"]

是否要使用
@可选:其他_属性
@其他_属性
获取节点?或者,您希望使用
@可选:other_属性
@属性
获取节点?你能澄清一下吗?描述不清楚。抱歉,没有解释清楚,我想做的是获取
@optional:other_属性
,前提是它存在。我的问题是,如果不声明名称空间而不是只返回任何内容(节点不存在),Xpath查询就会失败,这要感谢@donnyflow,但是我尝试了
/*[local-name()=(“other_属性”)]
,而且它似乎大部分时间都在工作。如果我理解正确,它将匹配任何名为
other\u attribute
的属性,而不考虑名称空间。因此,当我有来自其他同名名称空间的属性时,它也会匹配它们。有什么方法可以避免这样做吗?@DiamantisSellis请尝试此方法
/@*[name()=“optional:other_attribute”]
应该注意,此XPath仅在XPath 2.0或更高版本中有效。