是否可以在XPath中按名称空间进行过滤?

时间:2015-11-22 08:15:51

标签: c# wcf xpath filter routing

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

现在我要做的就是根据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等,然后根据该内容进行过滤。这可能吗?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你想使用XPath来查找某个命名空间中的元素。这可以使用namespace-uri()函数完成,如下所示:

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

命名空间前缀引用的URI地址在XML中比它自己的前缀更有意义,因此按URI地址过滤元素更有意义,如上例所示。但是,如果你想以某种方式想要通过名称空间前缀进行过滤,你可以尝试这种方式:

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