- PR -

XSLTの処理を教えてください

1
投稿者投稿内容
チルドレン
会議室デビュー日: 2004/02/13
投稿数: 8
投稿日時: 2004-10-13 20:43
いつもお世話になります。

XMLのデータとしてはふさわしくないかもしれませんが、
以下のようにデータ中に改行があったとします。

<data>あいうえお
かきくけこ</data>

この改行を意識してXSLTを使用して
以下のようなHTMLにしたいのですが・・。

<html>
<head>
</head>

<body>
あいうえお <br/>
かきくけこ
</body>
</html>


どのような処理をするべきでしょうか?
よろしくお願いします。

MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 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/06
投稿数: 12
投稿日時: 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(., '&#10;')"/>
<br/>
<xsl:value-of select="substring-after(., '&#10;')"/>
</xsl:template>

</xsl:stylesheet>
1

スキルアップ/キャリアアップ(JOB@IT)