是否可以在XPath中按命名空间进行筛选

本文关键字:命名空间 筛选 XPath 是否 | 更新日期: 2023-09-27 18:23:46

我有一系列服务,我想为它们的唯一名称空间赋予每个不同的前缀。

现在我所要做的就是根据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的节点(或者我的其他服务的其他前缀等等)。我可以将服务命名为cards、dir、interface等等,然后根据这些内容进行过滤。这可能吗?

是否可以在XPath中按命名空间进行筛选

如果我正确理解这一点,您希望使用XPath来查找特定命名空间中的元素。这可以使用namespace-uri()函数来完成,如:

//*[namespace-uri()='http://NilooSoft.com']

名称空间前缀引用的URI地址在XML中比其本身的前缀更有意义,因此按照URI地址过滤元素更有意义,如上例所示。但是,如果您想通过名称空间前缀进行过滤,您可以尝试以下方式:

//*[starts-with(name(),'nil:')]