- - PR -
XSLで"(ダブルクォート)を""(ダブルクォート2つ)に変換したい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-05-31 17:44
こちらに投稿するのは初めてになります。宜しくお願いします。
現在XMLファイルからCSVへ出力する物を開発しています。 件名のとおり、XML文書内にダブルクォートがあったらそれを2つにするXSLを作成して いますが行き詰まりました。 試したこと @translateを使う 過去ログで拝見しましたが、1つの文字を2つの文字への変換(置換)はできないようです。 Aconcat、substring-after、substring-beforeを使う こんな感じで書いてみました ・XML文書 <?xml version="1.0" encoding="UTF-8"?> <log> <message>aaa bbb ccc "ddd"</message> </log> ・XSL <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text" indent="yes"/> <xsl:template match="/"> <xsl:value-of select="concat(substring-before(/log/message, '"'), '""', substring-after(/log/message, '"'), '"')"/> これだと一応うまくいったように見えるのですが、XMLの文書が <message>aaa "bbb" "ccc" ddd</message> のようにダブルクォートで囲まれた文字列が複数になるとこちらの期待する結果が 得られません。 どなたか解決がお分かりの方はご教授願いますm(__)m |
|
投稿日時: 2004-05-31 19:14
call-templateを再帰関数のように使うとできます。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3077&forum=9 処理の対応関係は string-length($value) < $width → 'contains(....,")' &#10; → "" 辺りで,substringの組み立ては非再帰と同様。 -------------- XSLT が適する処理分野ではないです、スピードを考えても(全然、速そうじゃない) XML2CSV 物は多数ありますし。 [ メッセージ編集済み 編集者: MMX 編集日時 2004-05-31 19:21 ] |
1