是否可以在 XPath 中按名称空间进行过滤?
Is it possible to filter by namespace in XPath?
我有一系列服务,我想为它们的独特命名空间分别提供不同的前缀。
现在我要做的就是根据出现在 SOAP 上的名称空间进行排序。
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:nil="http://NilooSoft.com">
<soap:Header/>
<soap:Body>
<nil:ApplicantGetByForeignId>
</nil:ApplicantGetByForeignId>
</soap:Body>
</soap:Envelope>
我的意思是简单地查明此消息是否包含前缀为 nil 的节点(或我的其他服务等的其他前缀)。
我可以将服务命名为卡片、目录、接口等,然后按该内容进行过滤。这可能吗?
如果我没有理解错的话,你想使用 XPath 在特定命名空间中查找元素。这可以使用 namespace-uri()
函数来完成,如下所示:
//*[namespace-uri()='http://NilooSoft.com']
命名空间前缀引用的URI地址在XML中比前缀本身更有意义,所以像上面的例子那样通过URI地址过滤元素更有意义。但是,如果你想以某种方式改为按命名空间前缀进行过滤,你可以尝试这种方式:
//*[starts-with(name(),'nil:')]
我有一系列服务,我想为它们的独特命名空间分别提供不同的前缀。
现在我要做的就是根据出现在 SOAP 上的名称空间进行排序。
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:nil="http://NilooSoft.com">
<soap:Header/>
<soap:Body>
<nil:ApplicantGetByForeignId>
</nil:ApplicantGetByForeignId>
</soap:Body>
</soap:Envelope>
我的意思是简单地查明此消息是否包含前缀为 nil 的节点(或我的其他服务等的其他前缀)。 我可以将服务命名为卡片、目录、接口等,然后按该内容进行过滤。这可能吗?
如果我没有理解错的话,你想使用 XPath 在特定命名空间中查找元素。这可以使用 namespace-uri()
函数来完成,如下所示:
//*[namespace-uri()='http://NilooSoft.com']
命名空间前缀引用的URI地址在XML中比前缀本身更有意义,所以像上面的例子那样通过URI地址过滤元素更有意义。但是,如果你想以某种方式改为按命名空间前缀进行过滤,你可以尝试这种方式:
//*[starts-with(name(),'nil:')]