2009年12月5日土曜日

xslt 行と列の変換

こんな感じで、表の形になったデータの行と列を入れ替えたいとする。
abc
def
ad
be
cf

XML ではこんな変換になる。
<?xml version="1.0" encoding="UTF-8" ?>
<matrix>
<r><c>a</c><c>b</c><c>c</c></r>
<r><c>d</c><c>e</c><c>f</c></r>
</matrix>
<matrix>
<r><c>a</c><c>d</c></r>
<r><c>b</c><c>e</c></r>
<r><c>c</c><c>f</c></r>
</matrix>

こんな XSLT が一個の解になる。(Eclipse で確認
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/matrix/r[1]">
<matrix>
<xsl:for-each select="c">
<r>
<xsl:variable name="col-index" select="position()"/>
<xsl:for-each select="../../r/c[$col-index]">
<c><xsl:value-of select="."/></c>
</xsl:for-each>
</r>
</xsl:for-each>
</matrix>
</xsl:template>

<xsl:template match="r[position()!=1]"/>

</xsl:stylesheet>

0 件のコメント:

コメントを投稿