- はまさん
- 常連さん
- 会議室デビュー日: 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);
|
以上、ご教授よろしくお願いいたします。
|