2001年10月4日(木曜日)
要素を 2つずつまとめる XSLT
yuuさんの電波を受信しつつ完成?
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml"/> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="foo"> <xsl:if test="position() mod 4 = 2"> <xsl:text disable-output-escaping="yes"><bar></xsl:text> </xsl:if> <foo><xsl:value-of select="current()"/></foo> <xsl:choose> <xsl:when test="position() mod 4 = 0"> <xsl:text disable-output-escaping="yes"></bar></xsl:text> </xsl:when> <xsl:when test="current() = ../foo[last()]"> <xsl:text disable-output-escaping="yes"></bar></xsl:text> </xsl:when> </xsl:choose> </xsl:template> </xsl:stylesheet>
美しくない……。もっとスマートなやり方ってないのっ?
ちなみに foo要素と foo要素の間にある CRLF も一つのノードとして扱われていて、position() はそれもカウントした値を返している模様。
※考えてみればこれは当然で、"<span>foo</span><span>bar</span>" の span要素の間に CRLF があったら、それはちゃんと語の区切りとして機能してもらわないと困ります。
- 「要素を 2つずつまとめる XSLT」にコメントを書く
- 前(古い): 2001年10月3日(Wednesday)のえび日記
- 次(新しい): 2001年10月5日(Friday)のえび日記