634 – JAXP – DOM – XML文章の新規作成

1月 1, 2003 · Posted in Java API for XML Processing · Comment 

サンプルソースコード

XML文章を新規作成するプログラムを以下に示します。

package xml.dom;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;

public class test {
    public static void main(String[] args){
        try{
            // ドキュメントビルダーの作成
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = dbFactory.newDocumentBuilder();

            // ドキュメントの作成
            DOMImplementation domImpl = builder.getDOMImplementation();
            Document doc = domImpl.createDocument("", "root", null);

            // ファイルとして出力
            // ※検証用
            TransformerFactory transFactory = TransformerFactory.newInstance();
            Transformer transformer = transFactory.newTransformer();
            DOMSource source = new DOMSource(doc);
            FileOutputStream os = new FileOutputStream(new File("file.xml"));
            StreamResult result = new StreamResult(os);
            transformer.transform(source, result);

        }catch(FileNotFoundException e){
            e.printStackTrace();
        }catch(ParserConfigurationException e){
            e.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

結果(file.xml)

<?xml version="1.0" encoding="UTF-8"?>
<root/>

DOMImplementationインタフェースは、Documentオブジェクトを新規作成するために提供されているインタフェースです。引数としてネームスペースURIとルート要素名、DocumentTypeを指定できるようになっています。

このように作成したDocumentオブジェクトに対してノードや属性を追加していくことにより、XML文章を作成します。

634 – JAXP – DOM – XMLドキュメントの出力

1月 1, 2003 · Posted in Java API for XML Processing · Comment 

出力

プログラムでDocumentオブジェクトを作成後、ファイルとして保存する方法。

例:input.xmlからDocumentオブジェクトを生成し、output.xmlとしてファイル保存するプログラム。応用することでServletからダウンロードさせるなど、いろいろなことができる。

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class XMLFileSave {
    public static void main(String[] args){
        try{
            // ファイル読み込み
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = dbFactory.newDocumentBuilder();
            Document doc = builder.parse("input.xml");

            // ファイル保存
            TransformerFactory transFactory = TransformerFactory.newInstance();
            Transformer transformer = transFactory.newTransformer();
            DOMSource source = new DOMSource(doc);
            FileOutputStream os = new FileOutputStream(new File("output.xml"));
            StreamResult result = new StreamResult(os);
            transformer.transform(source, result);

        }catch(FileNotFoundException e){
            e.printStackTrace();
        }catch(ParserConfigurationException e){
            e.printStackTrace();
        }
    }
}

実行イメージ

634 – JAXP – DOM – 指定した要素の属性を取得

1月 1, 2003 · Posted in Java API for XML Processing · Comment 

getAttribute

指定した要素の属性を取得するためには、ElementクラスのgetAttributeメソッドを利用します。利用例を以下に示します。

import java.io.BufferedInputStream;
import java.io.FileInputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class DOMTest {
    public static void main(String[] args) {
        try{
            FileInputStream fis = new FileInputStream("./sample.xml");
            BufferedInputStream bis = new BufferedInputStream(fis);

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse(bis);

            // ルート要素の取得
            Element root = doc.getDocumentElement();

            // book 要素のリストを作成
            NodeList list = root.getElementsByTagName("book");

            // 1つ目の book 要素の id を表示
            Element element = (Element)list.item(0);
            System.out.println("1つ目のbook要素のid:"  + element.getAttribute("id"));

        }catch(Exception e){
            System.err.println(e.getMessage());
            System.exit(1);
        }
    }
}

入力ファイル(sample.xml)

<?xml version="1.0" encoding="Shift_JIS"?>
<document>
    <book id="10">
        <title>AAA</title>
        <price>1500</price>
    </book>
    <book id="20">
        <title>BBB</title>
        <price>1200</price>
    </book>
</document>

結果

1つ目のbook要素のid:10

« 前ページへ次ページへ »