使用Xpath导航到Timestamp节点

时间:2013-06-21 04:29:34

标签: xpath

我有这个安全信封。如何导航到Secuirty内的Timestamp节点 类似这样/ Envelope / Header / Security / TimeStamp

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soap:Header>
<wsse:Security soap:mustUnderstand="1"><wsu:Timestamp wsu:Id="Timestamp-dd0398f4-0844-4de9-997e-1fcbd7febd54"><wsu:Created>2013-06-21T04:25:00Z</wsu:Created>
 <wsu:Expires>2013-06-21T04:30:00Z</wsu:Expires></wsu:Timestamp><wsse:BinarySecurityToken ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" 

谢谢

1 个答案:

答案 0 :(得分:0)

您的XML包含名称空间,您可以

  • 必须注册并使用所有名称空间(非常类似于Sridhar建议但是用于错误的斜杠)

    /soap:Envelope/soap:Header/wsse:Security/wsu:Timestamp
    

    注册命名空间与编程语言,编程语言和使用的XPath处理器有很大不同,因此您必须在相应的文档中查看。

  • 忽略名称空间,这可以通过使用“通配符名称空间”从XPath 2.0轻松开始

    /*:Envelope/*:Header/*:Security/*:Timestamp
    

    对于XPath 1.0,您不能这样做,您必须选择所有元素并检查其名称:

    /*[local-name() = "Envelope"]/*[local-name() = "Header"]/*[local-name() = "Security"]/*[local-name() = "Timestamp"]
    

    一般来说,忽略命名空间应该被认为是不好的做法,特别是在XPath 1.0中导致可怕的阅读和可能较慢的查询。