2016-10-25 9 views
0

私はSOAPUIツールを使用して、さまざまなAPI呼び出しからXPathを使用してチャンネルの要素にアクセスするために苦労しています。こののXpath複数の名前空間の要素を選択する

<Channels resultCount="200" xmlns="urn:web:1.0"> 
    <Channel id="tv1"/> 
    <Channel id="tv2"/> 
</Channels> 

のようなものを応答「http://ip/channels/api」で応答APIを持っています。私が使用して同じhttpリクエスト内の任意のチャンネルIDを取得しようとした場合:

declare namespace ns1='urn:web:1.0'; 
//ns1:Channels[1]/ns1:Channel[1]/@id 

を私は戻って

TV1

として、正しい結果を得るが、私はからのチャネルIDを取得しようとした場合別のHTTPリクエスト、私は空白の応答があります。私は最初にhttp://ip/channels/apiに到達するためのネームスペースを定義し、次にxmlns = "urn:web:1.0"の別のネームスペースを定義していますが、この呼び出しを構成する正しい構文はわかりません。誰かが私にこれを行う正しい方法を導くために助けてください、または私が探しているはずの正しい用語を少なくとも参照することができますか?

+0

'local-name()'を使ってみましたか? '// * [local-name()= 'Channels']/* [local-name()= 'Channel']/@ id'の行に沿っています。 – Markus

+0

Rahul、サンプルxmlを複数の名前空間で表示できますか?あなたの現在のサンプルは表示されません。ところで、あなたは正確に何をしようとしていますか?最初の応答から値を取得し、次の要求でその値を使用しますか?詳細を明確にしてください。更新する質問を編集します。 – Rao

答えて

1

2つのリクエストがあるとします。最初のものである:

<Channels resultCount="200" xmlns="urn:web:1.0"> 
    <Channel id="tv1"/> 
    <Channel id="tv2"/> 
</Channels> 

2つ目:

<Channels resultCount="200" xmlns="http://ip/channels/api"> 
    <Channel id="tv1"/> 
    <Channel id="tv2"/> 
</Channels> 

両方が<Channel>要素を有するが、異なる名前空間の定義からです。ですから、あなたが直接<Channel> id属性は、このノードが上のネストされているかdespiste名前空間の定義とアクセスを避けることができますので、あなたが名前空間の要素のためのワイルドカードとして*を使用することができますSOAPUIの両方のための共通のXPathを使用したい場合は

親要素とその名前空間です。だからこのようなものは、あなたのケースで動作する必要があります:

//*:Channels[1]/*:Channel[1]/@id 
+0

Solution1: '' *:チャンネル[1]/*:チャンネル[1]/@ id' これはうまくいかなかった!私はこれが同じHTTP要求の呼び出し内でのみ動作することができますが、別の要求からではないと思う。私の場合、私は別のPut要求内で1つの呼び出しを行います。 解決策2:どちらも機能しませんでした。 がどのように形成されたかを以下で確認してください。 declare namespace ns1 = 'http:// ip // channels/api'; declare namespace ns2 = 'urn:web:1.0'; // ns1:ns2:チャネル[1]/ns1:ns2:チャネル[2]/@ id は、この正しいXPathですか? –

+1

@ R.Rahul私はあなたの再評価を理解しているかわかりません。しかし、同じ ''要素を持ち、異なる名前空間にある2つの異なるXMLでXPathを動作させたいのですか? – albciff

+0

ところで、もちろん '//ns1:ns2:Channels'は動作しません。だからこそ私はネームスペースのワイルドカードとして' * 'を使うことをお勧めします。 – albciff

関連する問題