我有这个安全信封。如何导航到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"
谢谢
答案 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中导致可怕的阅读和可能较慢的查询。