- PR -

出力する文字コードをデータによって変える方法

1
投稿者投稿内容
ryu
会議室デビュー日: 2003/02/01
投稿数: 4
投稿日時: 2006-04-05 08:59
XMLデータ中のlang属性によって、出力する文字コードを変えたいのですが、
XSLTで行う方法はないでしょうか?
(xsl:outputを<xsl:if>で判定するようにしてみましたが、
xsl:outputはxsl:templateの外にあるため、<xsl:if>は使用できませんでした。)
なお、出力したい文字コードは、lang属性が"ja"の場合Shift_JIS、"en"の場合UTF-8です。


■入力のXMLデータ
<?xml version="1.0" encoding="Shift_JIS"?>
<abcde lang="ja">あいうえお</abcde>

■Shift_JISで出力するスタイルシートの記述例
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="Shift_JIS"></xsl:output>
<xsl:template match="/">
<html>
<head></head>
<body>
<xsl:value-of select="."></xsl:value-of>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

■出力されるHTMLデータ
<html>
<body>あいうえお</body>
</html>

kuma
大ベテラン
会議室デビュー日: 2004/02/25
投稿数: 110
投稿日時: 2006-04-05 09:21
htmlもxslも結局xmlですよね?
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-04-05 11:04
XSLT 1.0 で、XSLT を一回だけ適用する場合には不可能です。

kumaさんが書かれているように XSLT スタイルシートも XML なので、

  1. まず、lang 属性を見て XSLT で XSLT スタイルシートを出力
  2. 1で作ったスタイルシートを入力 XML に適用

と、2回 XSLT を適用すれば良さそうです。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-04-05 12:19
load済みの xslt をDOM で書替えたり(パラメータ渡し的)
xslの include、import で2段処理

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="Shift_JIS"/>
<xsl:include href="..."/>
</xsl:stylesheet>

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8"/>
<xsl:include href="..."/>
</xsl:stylesheet>

... は同じファイル名

を lang で選択(xslt、1段ではできません)
ryu
会議室デビュー日: 2003/02/01
投稿数: 4
投稿日時: 2006-04-05 23:06
回答ありがとうございます。

xsltを2段で適用する方向で検討してみます。
1

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