atom:contentをXSLTを使って表示する時
XSLT、一日や二日でそう簡単に扱えるような代物ではなかったみたい…。atom:content
でエントリーの本文を拾う時にハマッテしまった。なかなか難しいんだな。
今回は、エントリーの編集画面を作っているので、textarea
に本文を入れる必要があった。だけどXSLTを
<textarea><xsl:value-of select="atom:content"/></textarea>
と書いてしまうと、mt-atom.cgiでのAtomにはatom:content
とその子のdiv
の間にホワイトスペースが入っているので、それがtextarea
の中にも入ってしまうし、エントリー本文の中で使っているHTMLタグが消えてしまう。
それで悩んでいた時にRe: Atom の XSLTを見つけて、よく読んだらやっと以下のような正解を見つけた。
<?xml version="1.0" encoding="utf-8" ?> <xsl:stylesheet version="1.0" xmlns:atom="http://purl.org/atom/ns#" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:dc="http://purl.org/dc/elements/1.1/"> <xsl:output method='html' version='1.0' encoding='UTF-8' indent='no'/> <xsl:template match="atom:entry"> <textarea><xsl:copy-of select="atom:content/xhtml:div/node()"/></textarea> </xsl:template> </xsl:stylesheet>
上に挙げたnantoさんのページでは
<xsl:copy-of select="atom:content/xhtml:div"/>
と言った感じになっているけど、この場合はdiv
要素ごと表示される感じ。更に中身だけ欲しければ今回のようにnode()
を指定する。これで一応なんとかなった。あとnamespaceをちゃんと書くのを忘れてしまったのも結構あったな、気をつけないと…。
でも今書いたXSLTだとFirefoxではエントリーの中で使っているHTML要素にも全部いちいちxmlns="http://www.w3.org/1999/xhtml"
って属性が入っちゃう。これどうにかならないかなぁ。まだ模索が必要か…
けどXSLTって本当にいいな。もっとちゃんと勉強して自由に書けるようになろっと。