なんか***基礎文法マスターなるものが流行っているそうなのでやってみる。
2010-02-02 19時追記>
- ことの発端はこちら→ Perl基礎文法最速マスター
- id:tt_clownさんによるまとめ記事はこちら → はてな的プログラミング言語人気ランキング
続きを読む: XSLT2.0基礎文法最速(?)マスター
なんか***基礎文法マスターなるものが流行っているそうなのでやってみる。
2010-02-02 19時追記>
元ネタ → http://d.hatena.ne.jp/bleis-tift/20090930/1254309201
何か流行ってるみたいなので、やってみる。
perlは簡単すぎて面白くないので、
use List::Util qw/sum/;
print sum 1 .. (shift or 10);
元ネタ: ``Sorting XSLT output items'' -- comp.text.xml
index.xml
<root>
<link href="data1.xml" />
<link href="data2.xml" />
</root>
data1.xml
<root>
<data index="6">VI</data>
<data index="2">II</data>
</root>
data2.xml
<root>
<data index="1">I</data>
<data index="4">IV</data>
<data index="2">II</data>
<data index="10">X</data>
</root>
上記のindex.xmlに対して下記のXSLTを適応すると、 data1.xml/data2.xml の 全ての /root/data/@index に対してソートが適応されます。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="xsl"
>
<xsl:output method="xml" />
<xsl:template match="/" >
<root>
<xsl:for-each select="document(root/link/@href)/root/data">
<xsl:sort select="./@index" data-type="number"/>
<data><xsl:value-of select="." /></data>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
結果
<root>
<data>I</data>
<data>II</data>
<data>II</data>
<data>IV</data>
<data>VI</data>
<data>X</data>
</root>
XSLT2.0勧告の§16.1 をみたら、document()
はuriのsequenceを引数に取るって書いてある。いやー、知らんかった.