- - PR -
XMLデータのファイルへの書き込み
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-12-10 15:53
はじめまして、おくちんと申します。
今、XindiceからXMLデータを取り出し、それをファイルへ書き込みをしたいと考えています。 そこで以下のような流れでファイルへ書き込もうとしています。 BufferedWriter out = new BufferedWriter(new FileWriter("D:/XML/result.xml")); // データベースからドキュメントを取得 XMLResource document2 = (XMLResource) col.getResource(DocumentName); //取得したドキュメントをDOMに変換 Document document3 = document2.getContentAsDOM().getOwnerDocument(); //ファイルへの出力 String CharacterCode = "Shift_JIS"; ((XmlDocument)document3).write(out, CharacterCode); このながれでファイルに書き出そうとすると ClassCastException がでてしまいました。 ここで行き詰まってしまい、自分ではどうしようもなくなったので書き込みをさせていただきました。 解決方法、または違ったやり方がありましたら、教えていただきたいです。 よろしくお願いします。 | ||||
|
投稿日時: 2003-12-10 16:21
JAXP準拠によるDOMオブジェクトのシリアライズですね。
これは、裏技的に「スタイルシートを指定せずにXSLT変換する」ことで実現します。 以下、Apache XML ProjectのXalan-J 2を想定します。
こんな感じでしょうか。 詳細はXalan-J 2のAPI Docをご覧下さい。 ただ、使っているAPIはどれもJAXP準拠であり、Xalan-J 2非依存です。 | ||||
|
投稿日時: 2003-12-10 17:45
おばけさん返答ありがとうございます。
教えていただいた通りに行ったところXML文書が XML1.xml--------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <root><tag>text</tag><kanji/><kanji/></root> ----------------------------------------------- のようになり、ちょっと分かりにくいものとなりました。 これを XML2.xml--------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <root> <tag>text</tag> <kanji/> <kanji/> </root> ----------------------------------------------- のようにファイルに書き込むことはできないのでしょうか? ((XmlDocument)document3).write(out, CharacterCode); を用いて出力させると、XML2.xmlのXML文書の形でファイルに書き込むことができるのですが、なにか良い方法はないでしょうか? また ((XmlDocument)document3).write(out, CharacterCode); を使える方法はないでしょうか? よろしくお願いします。 | ||||
|
投稿日時: 2003-12-10 17:58
出力結果をインデントさせたいわけですね。
出来ますよ。 えっと、確かTransformerを生成する前に
を呼んでやればよかった気がします。 | ||||
|
投稿日時: 2003-12-10 19:11
ファイルへの書き出し方に次のようなやり方があることを知り試したのですが、ファイルへの書き込みはやはり
XML1.xml--------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <root><tag>text</tag><kanji/><kanji/></root> ----------------------------------------------- のようになってしまいました。 // ファイルへの書き込み BufferedWriter out = new BufferedWriter(new FileWriter("D:/XML/result.xml")); / ドキュメントを取得 XMLResource document = (XMLResource) col.getResource(DocumentName); // 取得したドキュメントをDOMに変換 Document xmlDocument = document.getContentAsDOM().getOwnerDocument(); //シリアライズ org.apache.xml.serialize.OutputFormat format = new org.apache.xml.serialize.OutputFormat("XML", "Shift_JIS", false); format.setPreserveSpace(true); org.apache.xml.serialize.XMLSerializer serializer = new org.apache.xml.serialize.XMLSerializer(out, format); / 取得したドキュメントを表示 serializer.serialize(xmlDocument); XML2.xml--------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <root> <tag>text</tag> <kanji/> <kanji/> </root> ----------------------------------------------- XML2.xmlのようにファイルに書き込むことはできないのでしょうか? おばけさん、ありがとうございます。 おばけさんに教えていただいた方法を用いてインデントさせた場合、 ---------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <root> <tag>text</tag> <kanji/> <kanji/> </root> ----------------------------------------------- のようにファイルに書き込まれ、これを XML2.xml--------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <root> <tag>text</tag> <kanji/> <kanji/> </root> ----------------------------------------------- のように親と子が同じ(空白が入るなどして)深さに出力されない方法はないのでしょうか? よろしくお願いします。 [ メッセージ編集済み 編集者: おくちん 編集日時 2003-12-10 19:52 ] | ||||
|
投稿日時: 2003-12-10 21:13
XML, pretty printerをキーワードにWeb検索すれば、その手のツールが見つかると思います。
| ||||
|
投稿日時: 2004-02-19 11:15
中込です。
false ==> true http://xml.apache.org/xerces2-j/javadocs/other/org/apache/xml/serialize/OutputFormat.html#OutputFormat(org.w3c.dom.Document,%20java.lang.String,%20boolean) If indent is true, the document will be pretty printed with the default indentation level and default line wrapping. |
1