- PR -

XSLTで改行(
)を出力するには?

投稿者投稿内容
ほげお
会議室デビュー日: 2006/10/13
投稿数: 7
投稿日時: 2006-10-13 00:47
ある XML 文書を SpreadsheetML に変換する処理を行っているのですが、データに改行を含むものがあって、
Excel のセル上でも改行を再現したいと苦戦しています。
ワークシートを XML 形式で保存すると、改行のある部分は 
 が埋まっているので、その状態を作りたい
のですが、文字参照を使うと出力時に改行コードそのものに置き換わるため、セル内で改行を再現させること
ができません。

改行前の文<xsl:text disable-output-escaping = "yes" >&amp;#10;</xsl:text>改行前の文

とすれば、意図した結果になるようなのですが、<xsl:value-of select="hoge"/> の hoge のデータを同じ
結果になるように加工する方法が分かりません。このサイトで、改行を <BR /> に置き換える方法などは見
つけることができたのですが、上記の解決に直接つながる情報を見つけることができませんでした。
詳しい方のアドバイスをいただけると助かります。
ほげお
会議室デビュー日: 2006/10/13
投稿数: 7
投稿日時: 2006-10-13 01:46
ちなみに、元のXML内にある改行コードは LF(&#10;) です。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-10-13 09:45
LF も &#10; も xml として同じ扱いになりませんか?
LF のままの時 Excel 表示はどうなります?
ほげお
会議室デビュー日: 2006/10/13
投稿数: 7
投稿日時: 2006-10-13 10:33
MMX様、コメントをありがとうございます。
Excel上だと、LFの改行コードだとセル上で半角スペースが空いたような状態で表示されます。そのXMLファイルをエディタで開いて、LFの改行コードを&#10;に変換してから表示すると、改行が再現します(セルの高さがない時は選しないと分かりませんが)。
ほげお
会議室デビュー日: 2006/10/13
投稿数: 7
投稿日時: 2006-10-13 10:49
ちなみに、translate 関数の使い方が間違えていることは承知しつつ、

<xsl:value-of select="translate (hoge,'&#10;','&#13;&#10;')" />

のように書くと、書き出したXML内に &#13; が文字として出現します。Mac 版の Excel だとこれでも
セル内で改行されるのですが、Win 版の Excel だと半角の中黒で表示されてしまいます。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-10-13 14:13
属性値じゃないのに、属性値の正規化ポク読まれるのは 「変ですね」。

第19回 落とし穴が潜む属性値の正規化
http://www.atmarkit.co.jp/fxml/rensai/w3cread19/w3cread19.html#d

LF → &#10; 変換が必要みたい。入力のxmlテキストを
文字列として事前処理してから XSLTプロセッサに 渡すのが 簡単そう。
ほげお
会議室デビュー日: 2006/10/13
投稿数: 7
投稿日時: 2006-10-13 17:27
MMX様、ヒントをありがとうございます。

引用:

LF → &#10; 変換が必要みたい。入力のxmlテキストを
文字列として事前処理してから XSLTプロセッサに 渡すのが 簡単そう。



これは、例えば、LFを何かの代替文字列に変えておいて、それをXSLT内で &#10; に変換させるという
ことになりますでしょうか。私が一番難しいと感じているのは、どうやって "&#10;" という文字列を
XSLT の中で指定して出力させるかという部分なのですが、その点のヒントを教えていただけると助か
ります。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-10-16 12:01
改行を <BR /> に置き換える方法
の <br/>を
[CODE]<xsl:text disable-output-escaping = "yes" >&#10;</xsl:text>[/CODE]
に変更するとよいのでは?

[ メッセージ編集済み 編集者: MMX 編集日時 2006-10-16 12:02 ]

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