- ベストアンサー
DOMのXML宣言値の変更
XMLファイルをXMLパーサを使ってDOMにDocumentクラス変換します。 その変換してできたオブジェクトを操作して、 XML宣言のencodingの値を変更することは可能でしょうか?
- みんなの回答 (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 に 指定してます。
その他の回答 (2)
- a-kuma
- ベストアンサー率50% (1122/2211)
> てなXMLの文字コードを変換して表示すると、改行がなくなっちゃうんですよね。 いや、改行も #text ですから、改行がなくなっちゃうということは、Document を 改変しているということになってしまうので、それはありませんよ。 # 確かめもせず書いていますけど (^^;
お礼
すみません。なんか勘違いしていました。なんでだろ? 改行はなくなっていませんでした。 とにかく、何度も回答頂きありがとうございました。 たいへん参考になりました。
- a-kuma
- ベストアンサー率50% (1122/2211)
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)。 # ごめんなさい、試してません :-)
お礼
回答ありがとうございます。 さっそく試してみました。 ですがencodingの値は変わりませんでした・・・ やはり無理なんでしょうかねえ。 もう少し自分で調べてみます。 ありがとうございました。
お礼
できました!!!ありがとうございます。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の値を変更することはできました。 詳しい処理をご教授頂き、ありがとうございました。