0

私はこのセキュリティ封筒を持っています。/Envelope/Header/Security/TimeStamp のような Secuirty 内の 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" 

ありがとうございました

4

1 に答える 1

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 では、読み取りがひどくなり、クエリが遅くなる可能性があります。

于 2013-06-21T08:20:20.693 に答える