2008年1月15日作成
AtomとXSLTと名前空間(2)
環境を選びますが
orange/noteでは、JavaScript+XSLTを使い、 atom.xmlからindex.htmlを 自動生成しています。 これを作るときにめいっぱい悩んだのでメモ。
以前の話。 Safariでは動かないので、いまは使っていません。
atom:contentに含まれるHTMLノードを取り出す
まだよく理解できていないのですが、 xmlnsでxhtmlを指定しないといけないみたいです。 fami-note:atom:contentをXSLTを使って表示する時
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" encoding="UTF-8"
omit-xml-declaration="no"
...
<xsl:template match="atom:content">
<xsl:copy-of select="xhtml:html/xhtml:body"/>
</xsl:template>
省略した場合はうまく動かないです。なぜ? 名前空間は同じに見えるんですが。。
<!-- うまく動かないバージョン -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" encoding="UTF-8"
omit-xml-declaration="no"
...
<xsl:template match="atom:content">
<xsl:copy-of select="html/body"/>
</xsl:template>
最新10件だけ展開する
これもいまいち理解できてない気がします。特にxsl:number。 level = single | multiple | anyの違いとか。
xsl:value-ofではタグが無視されてしまうので、xsl:copy-ofを使う。 ソートする必要があるなら、xsl:sortが使えるみたい。
<xsl:template match="atom:content">
<xsl:variable name="n">
<xsl:number level="any"/>
</xsl:variable>
<xsl:if test="$n < 10">
<xsl:copy-of select="xhtml:html/xhtml:body"/>
</xsl:if>
</xsl:template>
CSSでマルチカラム
参考URLだけ。 IE5, IE6は早く滅びてしまうといいです。