是否可以在 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:')]