電子書籍の厳選無料作品が豊富!

XMLファイルをXMLパーサを使ってDOMにDocumentクラス変換します。

その変換してできたオブジェクトを操作して、
XML宣言のencodingの値を変更することは可能でしょうか?

A 回答 (3件)

> さっそく試してみました。


> ですがencodingの値は変わりませんでした・・・

試してみましたけど、変わりますよ。
文字列 → DOM → 文字列 と変換してます。


String msgText = "<aaa><bbb /></aaa>";

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(new InputSource(new StringReader(msgText)) );

TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.setOutputProperty(OutputKeys.ENCODING, "UTF-7"); // ※ここ
DOMSource ds = new DOMSource(document);
StringWriter sw = new StringWriter(256);
StreamResult rs = new StreamResult(sw);
tf.transform(ds, rs);

System.out.println(sw.toString());


setOutputProperty() をしなければ、UTF-8 になるところを、UTF-7 に
指定してます。
    • good
    • 0
この回答へのお礼

できました!!!ありがとうございます。m(_ _)m
でも、
<?xml version='1/0' encoding='Shift_JIS'?>
<a>
<b>B</b>
<c>C</c>
</a>

てなXMLの文字コードを変換して表示すると、改行がなくなっちゃうんですよね。
<?xml version='1/0' encoding='UTF-8'?><a><b>B</b><c>C</c></a>
みたいに。

これは、我慢するしかないのかなあ。。。
まあ、とりあえずencodingの値を変更することはできました。
詳しい処理をご教授頂き、ありがとうございました。

お礼日時:2002/07/31 19:50

> てなXMLの文字コードを変換して表示すると、改行がなくなっちゃうんですよね。



いや、改行も #text ですから、改行がなくなっちゃうということは、Document を
改変しているということになってしまうので、それはありませんよ。

# 確かめもせず書いていますけど (^^;
    • good
    • 0
この回答へのお礼

すみません。なんか勘違いしていました。なんでだろ?
改行はなくなっていませんでした。
とにかく、何度も回答頂きありがとうございました。
たいへん参考になりました。

お礼日時:2002/08/01 16:58

DOM に対して指定するのではなく、Transformer で変換するときに指定することになります。



多分、こんな感じ。

Document doc;
Result result; // ← 適当なのが割りあたっているとして

Transformer tf = TransformerFactory.newInstance().newTransformer();

tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); // ← これ
tf.transform(new DOMSource(doc), result);

詳しくは、JAXP のマニュアルの、Transformer#setOutputProperty と
OutputKeys のあたりを参照ください(→参考URL)。
# ごめんなさい、試してません :-)

参考URL:http://java.sun.com/xml/jaxp/dist/1.1/docs/api/i …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
さっそく試してみました。
ですがencodingの値は変わりませんでした・・・
やはり無理なんでしょうかねえ。
もう少し自分で調べてみます。
ありがとうございました。

お礼日時:2002/07/31 16:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!