2013-05-23 40 views
10

このSOAP XMLファイルでは、XPathクエリを使用して7を取得するにはどうすればよいですか?XPathを使用してデフォルトの名前空間(名前空間接頭辞なし)を取得する

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <HelloWorldResponse xmlns="http://tempuri.org/"> 
      <HelloWorldResult>7</HelloWorldResult> 
     </HelloWorldResponse> 
    </soap:Body> 
</soap:Envelope> 

このXPathクエリは機能しません。//*[name() ='soap:Body']。あなたが名前空間接頭辞を設定している場合は

+0

何を抽出しようとしていますか? –

+0

は問題ではありません – user2411903

+0

がありません。問題ではありません。番号7が必要です – user2411903

答えて

18

することは、あなたは次のように、それを使用することができます:

//soap:Body 

しかし、あなたは、プレーンXPathを使用して、接頭辞なしで、デフォルトの名前空間を使用取得しようとしているノードから、 local-name()namespace-uri()のアトリビュートでのみアクセスできます。例:

//*[local-name()="HelloWorldResult"]/text() 

または:

//*[local-name()="HelloWorldResult" and namespace-uri()='http://tempuri.org/']/text() 

または:あなたのXMLに

//*[local-name()="HelloWorldResponse" and namespace-uri()='http://tempuri.org/']/*[local-name()="HelloWorldResult"]/text() 

、それらはすべて同じ結果、テキスト7を与えるだろう。

+0

** **ツールを使用してXPathを実行している場合は、そのクエリの名前空間を指定して、通常どおり(上記の回避策なしで)処理を続けることができます。言うまでもなく、各ツールにはその設定方法があります。 – acdcjunior

+0

優秀、ありがとうございました – user2411903

+0

この構文は、xmlns = "whatever"のノードが最後のノードの場合にのみ機能しますか?私はこの繰り返しの時間を今日試してみて、それを働かせることはできません。 –

関連する問題