- PR -

Crimsonを使用したXMLファイル出力について

1
投稿者投稿内容
はまさん
常連さん
会議室デビュー日: 2004/12/07
投稿数: 20
投稿日時: 2005-04-09 21:22
こんばんは。はまのっぷーと申します。

Crimsonを使用したXMLファイル出力の際にエンコード形式を設定できず、悩んでいます。
最初にXMLファイルをパースし、そのままXMLファイル出力を行っているのですが、

読み込み元のファイルはEUC-JPコードなのですが、
XMLファイル化後のファイルはUTF-8コードになってしまいます。

XMLファイル化でTransformerクラスを使用することを考えておりますので、
できれば、以下のソースコードの方針を保ったままにしたいです。

どなたかアドバイス等いただけますでしょうか。
よろしくお願いいたします。

コード:
XMLファイル読み込み元
<?xml version="1.0" encoding="EUC-JP"?>
<ROOT>
    <SUB>SUB1</SUB>
</ROOT>

出力したXMLファイル
<?xml version="1.0" encoding="UTF-8"?><ROOT>
    <SUB>SUB1</SUB>
</ROOT>

ソースコード
public static void main(String[] args) {
    
    try {
        //#############################
        // XMLファイルパース
        //#############################
        DocumentBuilderFactory dbf = 
            (DocumentBuilderFactory)Class.forName(
            "org.apache.crimson.jaxp.DocumentBuilderFactoryImpl").
            newInstance();
        DocumentBuilder builder = dbf.newDocumentBuilder();
        
        String fileName = "C:\\TEST.xml";
        Document document = builder.parse(
            new File(fileName).toURL().toExternalForm());
        Element element = document.getDocumentElement();
        
        //#############################
        // XMLファイル出力
        //#############################
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer();
        DOMSource source = new DOMSource(element);
        File newXML = new File(fileName);
        FileOutputStream fos = new FileOutputStream(fileName+".new");
        OutputStreamWriter writer = new OutputStreamWriter(fos, "EUC-JP");
        StreamResult result = new StreamResult(writer);
        transformer.transform(source, result);

        writer.close();
        fos.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}


はまさん
常連さん
会議室デビュー日: 2004/12/07
投稿数: 20
投稿日時: 2005-04-09 21:32
すいません。補足します。
JDKのバージョンは、1.5です。
Crimsonは、crimson-1.1.3-bin.tar.gzを使用しています。
つばさ
ベテラン
会議室デビュー日: 2005/02/05
投稿数: 54
投稿日時: 2005-04-10 00:32
つばさです。

transformer.transform(source, result);
の前に、
transformer.setOutputProperty(OutputKeys.ENCODING, "EUC-JP");
を入れるとtransformerがEUC-JPで出力すると思います。

crimsonというより、xalanだと思いますが。。。

以上です。
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2005-04-10 00:37
transformer を作成した後、transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "EUC-JP") を実行するとご期待の動作になると思われます。
今手許に実行環境がないので確認していませんが、お役に立てば幸いです。

エンコーディングの他にインデンテーションの有無などもこのメソッドで指定できます。

# うわ〜、つばささんと大被り〜〜〜

[ メッセージ編集済み 編集者: Gio 編集日時 2005-04-10 00:40 ]
はまさん
常連さん
会議室デビュー日: 2004/12/07
投稿数: 20
投稿日時: 2005-04-10 20:22
こんばんは。はまのっぷーです。

ご回答ありがとうございます。
Crimsonではないのですね。。。知識不足ですいません・・・

今、都合で確認できないので、
明日ご教授いただいた内容で確認してみます!また報告します。
ありがとうございました。
はまさん
常連さん
会議室デビュー日: 2004/12/07
投稿数: 20
投稿日時: 2005-04-11 09:12
つばささん、Gioさんにご教授いただいた通りに実行して
正しくXMLファイルが生成されることが確認できました。
ありがとうございました。

ちなみに、CrimsonでXML出力する方法は、以下のように
XmlDocumentクラスを使用することで合っておりますでしょうか。

コード:
org.apache.crimson.tree.XmlDocument xdoc;
Document doc = element.getOwnerDocument();
xdoc = (org.apache.crimson.tree.XmlDocument)doc;
BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
xdoc.write(bw, encode);



以上、ご教授よろしくお願いいたします。
1

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