質問: 初めまして。質問させて頂きます。 XML+XSLTでプログラミング中です。 次のようなXMLがあるとします。 ``` あ い う え お か き く け こ さ し す せ そ ``` この中で、`F1='か'`の下の`F3`のデータ(この場合は`く`)のみを取得するxpathの書き方が解らず悩んでおります。 どなたかお分かりになる方が居られましたら、ご教示お願いできますでしょうか? 宜しくお願いいたします。
回答: もし@user20662さんがWindows + MSXMLのようなXPath 1.0の世界でこの質問をされておられるようでしたら、@pghoさんの回答でもよいと思われます.しかし世の中はすでにXPath 3.0まで進んでいるので、やはり最低でもXPath 2.0ではどうなるか?は知っておいて損はないでしょう. @sayuriさんの御指摘のように、`//F1text()='か']/following-sibling::F3/text()`をXPath 2.0で使用すると以下の様に2つのテキストノードが選択されてしまいます.(oXygen 18.1で試しています)従って使用するXpathのバージョンが上がっても確実に動作するようにしておくには、`//F1[text()='か']/following-sibling::F3[1]/text()`のように書いておくのが確実です. ![Xpath 2.0での実行結果 もしXpath 2.0以上を使用するならば、`string(/DATA/F1string(.) eq 'か']/following-sibling::F3[1])`くらいが適当ではないでしょうか? * "く"を取得するのはtext()を返すよりxs:stringを返す方が適切と思います.(実際XPath 2.0を使用するXSLTスタイルシートでas="text()"のように使うことはまずないからです. * シーケンスを比較する一般比較演算子"="でなく、文字列比較を明示して値比較演算子"eq"を使用します. 結果は次のように"く"が値として返るようになります. ![Xpath 2.0での記述 以上 御参考になれば