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