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

