倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Document オブジェクトを取得する

今回は org.dom4j.Document オブジェクトの取得方法を見ていきます(一覧)。 プログラム内において XML 文書を扱うには、何においてもまず、XML 文書を表すオブジェクトを取得しなければなりません。 dom4jXML 文書を表すオブジェクトは org.dom4j.Document オブジェクト(以下、Document オブジェクト)です。

XML 文書の取得に関するクラスは、org.dom4j.DocumentHelper(以下、DocumentHelper)と org.dom4j.io パッケージ内のクラスです。


以下で、サンプル・コードを見ていきましょう。 ただし import 文や例外処理は省略もしくは簡略化してます。

♪Document オブジェクトの新規作成♪


DocumentHelper の static メソッド DocumentHelper#createDocument() を用います:

DocumentHelper.createDocument();

引数無しのメソッドの他、XML 要素を表す org.dom4j.Element 要素を引数にとるメソッドも定義されています。

java.lang.String → Document オブジェクト♪


新規作成する場合と同様、DocumentHelper の static メソッド DocumentHelper#parseText() を用います:

public static Document createFromString()
        throws DocumentException{

    String xml = "<root><element name='waman'/></root>";
    return DocumentHelper.parseText(xml);
}

XML ファイル → Document オブジェクト♪


ファイル名が "sample.xml" である XML ファイルを読み込むには、org.dom4j.io.SAXReader を使います:

public static Document createFromXmlFile()
        throws DocumentException{
 
    SAXReader reader = new SAXReader();
    return reader.read("sample.xml");
}

org.dom4j.io.SAXReader#read() メソッドの引数には、ファイル名以外にも幾つかの型のオブジェクトを渡せます:

  • java.lang.String (ファイル名)
  • java.io.File
  • java.io.InputStream
  • java.io.Reader
  • java.net.URL
  • org.xml.sax.InputSource

♪javax.xml.transform.Source → Document オブジェクト♪


JAXP (Java API for XML Processing) を用いた XML オブジェクトの型変換です。 引数の javax.xml.transform.Source オブジェクトを Document オブジェクトに変換します。 通常は(引数の javax.xml.transform.Transformer オブジェクトによって)XSL 変換を適用し、その結果の XML 文書を Document オブジェクトとして取得したい時に用います。 使用するクラスは org.dom4j.io.DocumentResult です:

public static Document createWithJAXP(
        javax.xml.transform.Transformer t, 
        javax.xml.transform.Source src)
        throws TransformerException{
 
    DocumentResult result = new DocumentResult();
    t.transform(src, result);
    return result.getDocument();
}

♪SAX イベント → Document オブジェクト♪


SAX イベントを Document オブジェクトに変換します。 SAX イベントを得るには、javax.xml.parsers.SAXParser もしくは org.xml.sax.XMLReader を用います(サンプル・コードでは前者を使用)。 この変換には org.dom4j.io.SAXContentHandler を使います:

public static Document createFromSAXEvent(
        javax.xml.parsers.SAXParser parser)
        throws org.xml.sax.SAXException, IOException{
 
    SAXContentHandler sch = new SAXContentHandler();
    parser.parse("sample.xml", sch);
    return sch.getDocument();
}

StAX イベント → Document オブジェクト♪


StAX イベントを Document オブジェクトに変換します。 StAX イベントを得るには、javax.xml.stream.XMLEventReader を用います。 この変換には org.dom4j.io.STAXEventReader を使います:

public static Document createFromStAXEvent(
        javax.xml.stream.XMLEventReader stream)
        throws javax.xml.stream.XMLStreamException{
 
    SAXEventReader reader = new SAXEventReader();
    return reader.readDocument(stream);
}

org.dom4j.io.STAXReader#readDocument() メソッドの引数には、javax.xml.stream.XMLEventReader 以外にも幾つかの型のオブジェクトを渡せます:

♪org.w3c.dom.Document → Document オブジェクト♪


引数の org.w3c.dom.Document オブジェクトを Document オブジェクトに変換します。 これにはorg.dom4j.io.DOMReader を使います:

public static Document createFromDomDocument(
        org.w3c.dom.Document domDoc){
 
    DOMReader reader = new DOMReader();
    return reader.read(domDoc);
}