假设我的XML如下所示:
<ns1:test xmlns:ns1="http://www.w3.org/TR/html3/" xmlns:UML="http://www.w3.org/TR/html4/">
<UML:Class name="test1">
<UML:ModelElement.stereotype>
<UML:Stereotype name="AFV"/>
</UML:ModelElement.stereotype>
</UML:Class>
<UML:Class name="test2" >
<UML:ModelElement.stereotype>
<UML:Stereotype name="AFV"/>
</UML:ModelElement.stereotype>
</UML:Class>
<UML:Class name="test3" >
<UML:ModelElement.stereotype>
<UML:Stereotype name="RCS"/>
</UML:ModelElement.stereotype>
</UML:Class>
<UML:Class name="test4" >
<UML:ModelElement.stereotype>
<UML:Stereotype name="DFK"/>
</UML:ModelElement.stereotype>
</UML:Class>
<UML:Class name="test5" >
<UML:ModelElement.stereotype>
<UML:Stereotype name="DSO"/>
</UML:ModelElement.stereotype>
</UML:Class>
</ns1:test>如何编写与名称空间无关的XPath查询,该查询将获得所有包含属性名称等于"AFV“的”构造型“元素的"Class”元素。
如果没有名称空间,我将使用所谓的Xpath轴,我的查询应该如下所示://Class[descendant::Stereotype[@name='AFV']]
XPath查询应该返回:
<UML:Class name="test1">
<UML:ModelElement.stereotype>
<UML:Stereotype name="AFV"/>
</UML:ModelElement.stereotype>
</UML:Class>
<UML:Class name="test2" >
<UML:ModelElement.stereotype>
<UML:Stereotype name="AFV"/>
</UML:ModelElement.stereotype>
</UML:Class>发布于 2015-07-02 01:29:34
可以使用XPath local-name()函数根据元素的本地名称进行匹配,忽略命名空间:
//*[local-name()='Class'][descendant::*[local-name()='Stereotype' and @name='AFV']]发布于 2015-07-02 07:59:43
为了完整起见,在XPath 2.0中您可以编写
//Class[descendant::*:Stereotype[@name='AFV']]https://stackoverflow.com/questions/31173947
复制相似问题