2011-10-18 17 views
2

だから私は次のようにノード構造を持っていると言う:私はこれが私のxmlのではなく、また、私はそれを構築する助けなかったと言いたいすべてのXPath 1.0:複数のノード結果から文字列を返す?

<Row> 
<Column Name="Primary Number">1</Column> 
<Column Name="Secondary Number">01</Column> 
<Column Name="Text">This is all one sentence</Column> 
<Row> 
<Column Name="Primary Number">1</Column> 
<Column Name="Secondary Number">02</Column> 
<Column Name="Text">I would like to return</Column> 
<Row> 
<Column Name="Primary Number">1</Column> 
<Column Name="Secondary Number">03</Column> 
<Column Name="Text">as one string, in one xpath line</Column> 

まず。しかし、私は必要な情報を検索するためにそれを使用することを余儀なくされています....だから助けてください。

私は1つのXPathを使用して、すべてのプライマリ番号= 1ノードのすべてのn個のテキストフィールドからテキストを含む1つの文字列を返すようにしたいと考えています。
これはXPath 1.0を使用して可能ですか?

さん)私は、そうではないエレガントなソリューションを持っているが、私は、二次数の正確な数を知っているし、それは(汚い連結のちょうど束だ場合にのみ動作します...

こんにちはすべて皆様のお返事ありがとうございます! 私はこの文字列で何をしたかったのですか?contains()を使って特定のキーワードを検索しましたが、実際にはすべての値を連結した文字列を持ったショートカットが見つかりました。同様の問題がありました。 Todのヒントがこれでかなり助けになりました。条件付きでBAMの魔法を追加しました。 はここにある:

Table[@Name='TableName']/Row/Column[@Name='Text' and contains(text(),"keyword")][preceding-sibling::Column[@Name='Primary Number' and text()='15']] 
だから、これは何の代わりに、その上に、その後使用して1つの文字列が含まれているとして、ノード値の結果()のすべてを連結するのですが、それは別にので、削除し単語の各ラインを検索します不可能の必要性。 すべての助けをいただきありがとうございました。
(私は誰も投票アップを与えるだろうが、私はあまりにも新しい:(よ)

+0

同じ質問:http://stackoverflow.com/questions/1403971/xpath-to-return-string-concatenation-of-qualifying-child-node-values – kan

+0

@Kanリンクをありがとう、私は厄介なコンカットを使用することに固執した.... – JWiley

答えて

1

これはここで働いているようだ:

//Row/Column[@Name="Text"][preceding-sibling::Column[@Name="Primary Number"]/text()="1"] 

リターン:

This is all one sentence 
I would like to return 
as one string, in one xpath line 

が、I

+0

トッド - 偉大な答えのおかげで、それは私が瞬間を持っているものよりもエレガントで、私はいくつかを学んだ。しかし、これはノードリストを返すので、XPath 1.0では最初のノード( "This is all one sentence")を使う文字列が必要でした。あなたは3つすべてを文字列として返すことができましたか? – JWiley

4

これはXPath 2.0でstring-join()関数によって行われています。これはXSLT 1.0で012を使って行うことができます。しかし、私はホスト言語サポートなしで純粋なXPath 1.0でそれを行うことはできないと思います。

+0

助けてくれてありがとう – JWiley

関連する問題