- - PR -
XSLTで開始Elementから終了Elementまでを抜き出す方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2009-02-10 18:31
お世話になっております。
XSLTにて、開始Elementから終了Elementまでを抜き出す良い方法はありませんでしょうか? *[XML]************************ <ROOT> <A>0001<A> <B>0002<B> <C>0003<C> <D>0004<D> <B>0005<B> <A>0006<A> </ROOT> *************************** <B>から<D>までの値を抜き出したい *[ほしい結果]************************ <B>0002<B> <C>0003<C> <D>0004<D> なにかよい方法がありましたらご教授ください。 |
|
投稿日時: 2009-02-10 19:29
2番目から4番目までということであれば、
position()を使っていけると思います。 |
|
投稿日時: 2009-02-11 00:25
回答ありがとうございます。
上記の例の場合、はpositionでも取得可能なのですが、とりたいのは <B>から<D>までの値を取得というロジックでとりたいとおもっております。 xsl:for-eachでまわしてという処理になるかと思うのですが、シンプルにかけないものかと。。。 |
|
投稿日時: 2009-02-11 13:30
状態を持つような動作をさせたいなら、再帰処理を書かないとダメではないですか。
|
|
投稿日時: 2009-02-12 18:36
回答ありがとうございます。
やはり再帰処理ですかね。。。 preceding-sibling::Bの結果のNodeListから following-sibling::Dをした結果がとれる方法があれば行けそうなんですが、 なかなかうまくいかないものです。 ***************************************************************** <xsl:template match="ROOT"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:for-each select="*[(preceding-sibling::B | self::B) and (following-sibling::D | self::D)]"> <xsl:copy-of select="."/> </xsl:for-each> </xsl:copy> </xsl:template> ***************************************************************** ※上記だとpreceding-sibling::Bの結果のNodeListを対象にfollowingしていないので以下のようなケースがNG <ROOT> <D>0000</D> <A>0001</A> <B>0002</B> <C>0003</C> <D>0004</D> <B>0005</B> <D>0004</D> <B>0005</B> <A>0006</A> </ROOT> |
1