- - PR -
XSLTの処理を教えてください
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-10-13 20:43
いつもお世話になります。
XMLのデータとしてはふさわしくないかもしれませんが、 以下のようにデータ中に改行があったとします。 <data>あいうえお かきくけこ</data> この改行を意識してXSLTを使用して 以下のようなHTMLにしたいのですが・・。 <html> <head> </head> <body> あいうえお <br/> かきくけこ </body> </html> どのような処理をするべきでしょうか? よろしくお願いします。 |
|
投稿日時: 2004-10-14 00:38
FAQ です XSLT 改行を<BR/> にとかでWeb検索で粘ると出ます
弟1法 string-after と string-before で内容テキストを分割して<BR/>を発生挿入する 再帰呼び出しの 王道です。 以降 string-after に再適用して処理を進行。 再帰呼び出しの引数の置き方は、 Lispで言ったら未処理の CDR 側を渡して、中間処理結果を即時にインスタンス化 する場合と、 処理結果を 引数に連結しながら伸ばしてゆき 、最後に引数をインスタンス化する 形がある。 再帰呼び出しの場合、デバッグの中間出力は出しにくいことがある。 (関数の戻り値に、デバッグ出力は混在してはいけない) 弟2法 text の output-escaping=no で <BR/> を書き込む 第3法 無理せず、HTMLの<PRE>で囲む。 CSS の white-space は <PRE>等以外では、うまく行かないかも。 弟4法 スクリプトの拡張関数で 改行を replaceallして <BR/> に変換して output-escaping=no で吐き出し その他、新しい方法を探してみてください。 |
|
投稿日時: 2004-10-14 10:16
変換自体は簡単です。 要求のとおりの書式で,となると工夫がいりますね。出力としてhtml形式を指定し,<br>ではなく<br/>にするのは,仕様上,正しくないと思います。このあたり,XSLTの仕様に詳しい方のご意見を伺いたい。 どうしても,<br/>の形式で出力するのであれば,xml形式で出力するよう指定し,かつxml宣言を出力しないようにする,という姑息な手段しかないような。 結局,下のようにするのが,もっとも近い出力を生みだすでしょう。 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/> <xsl:template match="/"> <html> <head> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="data" xml:space="preserve"> <xsl:value-of select="substring-before(., ' ')"/> <br/> <xsl:value-of select="substring-after(., ' ')"/> </xsl:template> </xsl:stylesheet> |
1