変更したDOMツリーをファイルに保存する
トップ
>
小技集
> (XML関連)変更したDOMツリーをファイルに保存する
XML Master Professional V2の試験範囲であるDOM Level 2では、
DOMツリーを変更しても、XMLファイルとして出力できません。
XMLファイルを読み込んでDOMツリーを変更し、その結果を別のXMLファイルとして保存したいという要求は当然あるでしょう。
しかし、XML Master Professional V2の試験範囲であるDOM Level 2では、そのようなことはできません。別のXMLファイルとして保存するには
DOM Level 3 Load and Save
を使います。
ここではXMLプロセッサとして
Xerces
を利用します。Xerces-J-bin.2.9.1.zipをダウンロードして解凍し、xercesImpl.jarを
クラスパスに追加
して下さい。
以下は
Java
のサンプルソースです。
package mypkg; import org.w3c.dom.bootstrap.DOMImplementationRegistry; import org.w3c.dom.ls.DOMImplementationLS; import org.w3c.dom.ls.LSInput; import org.w3c.dom.ls.LSOutput; import org.w3c.dom.ls.LSParser; import org.w3c.dom.ls.LSSerializer; import java.io.FileInputStream; import java.io.FileOutputStream; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; public class LoadAndSave { /** * メイン */ public static void main(String[] args) { try { // DOMImplementationLSのインスタンスを取得 // DOMImplemantationLSとは // Load and Save(DOM Level3)を実装したDOM実装のこと DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance(); DOMImplementationLS domImpLS =(DOMImplementationLS)registry.getDOMImplementation("LS 3.0"); // 入力元をカプセル化したオブジェクトLSInputを生成 FileInputStream fin = new FileInputStream("sample.xml"); LSInput input = domImpLS.createLSInput(); input.setByteStream(fin); // Load and Save(DOM Level3)の機能を使うには、 // 通常のパーサーではなく、Load and Saveパーサーを使用する LSParser parser = domImpLS.createLSParser( DOMImplementationLS.MODE_SYNCHRONOUS, null); Document doc = parser.parse(input); // DOMツリーに対して操作を行う Document doc2 = modifyDocument(doc); // 出力先をカプセル化したオブジェクトLSOutputを生成 LSOutput output = domImpLS.createLSOutput(); if (true) { // ファイルに出力する場合 FileOutputStream fout = new FileOutputStream("result.xml"); output.setByteStream(fout); } else { // コンソールに出力する場合 output.setByteStream(System.out); } output.setEncoding("Shift_JIS"); // メモリ上のDOMツリーをファイルに書き出すシリアライザー LSSerializer serializer = domImpLS.createLSSerializer(); serializer.write(doc2, output); } catch (Exception e) { e.printStackTrace(); } } /** * DOMツリーに対する操作を実装する */ private static Document modifyDocument(Document doc) { Element root = doc.getDocumentElement(); Node n1 = root.getFirstChild(); root.removeChild(n1); return doc; } }
このサンプルプログラムでは、読み込んだXMLファイル(sample.xml)のルート要素の最初の子要素を削除し、別のXMLファイル(result.xml)として保存しています。
sample.xmlが下記のようであった場合、
<?xml version="1.0" encoding="Shift_JIS"?> <Book><title>入門「XML」</title><price>2500</price></Book>
result.xmlは下記のようになります。
<?xml version="1.0" encoding="Shift_JIS"?> <Book><price>2500</price></Book>
DOMツリーに対する変更は、modifyDocumentメソッドで行っていますから、必要に応じてこのメソッドを修正してください。
また、if文の
true
を
false
に変えることで、DOMツリーの変更結果を
コンソールに出力する
こともできます。
トップ
>
小技集
> (XML関連)変更したDOMツリーをファイルに保存する
トップ
|
このサイトについて
|
管理者へメール
|
サイトマップ
www
una.soragoto.net
Copyright(c) 2009 - 2012 una All Rights Reserved.