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