JavaでXMLまたはHTMLをDOMドキュメントに変換する方法
長らく書いてなかったので自分でブログを立ち上げておきながらまだ存在していることに驚いている今日この頃。ふとプログラムを組んでいてXMLやHTMLの文字列からDOMドキュメントを生成する方法が分からなかったので覚書程度にまとめます。
DOMとは?
DOMはDocument Object Modelの略です。ググればすぐに出てきます。HTMLやXMLなどの要素(タグで囲まれた文字列)にアクセスし文章を取得したりタグ内の属性地を変更したりできます。詳しくはWikipediaなどで検索するか本を買って読むことをお勧めします。
さて、話を元に戻します。
JavaでHTMLやXMLを文字列で読み込んでDOMドキュメントを生成します。以下がそのサンプルプログラムになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
サンプルプログラム import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.xml.sax.SAXException; public class StringToDom { public static Document StringToDom(String argXML) throws ParserConfigurationException, UnsupportedEncodingException, SAXException, IOException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); return builder .parse(new ByteArrayInputStream(argXML.getBytes("UTF-8"))); } } |
今回はstaticメソッドで記述してみました。Utilクラスとか作っている方はそのままメソッド部分だけを入れれば動くようになっています。
さて、説明していきます。
最初のimportの話は飛ばします。eclipseさんが勝手にやってくれるのでそれに従いましょう。IDE等々使用していない人に関しては、importの部分を確実に入れましょう。入れない場合はエラーになりコンパイルが通らないので、エラーに従い一つ一つ入れれば大丈夫です。
まず宣言ですが、引数にXMLやHTMLを文字列で渡すとDOMドキュメントに変換して返してくれます。
1 2 3 4 5 |
public static Document StringToDom(String argXML) throws ParserConfigurationException, UnsupportedEncodingException, SAXException, IOException { |
宣言の後にthrows句が記述されておりExceptionが4つ書かれています。それぞれの例外の簡単な説明は以下のとおり。
- ParserConfigurationException : 使用されているパーサー(テキスト文章を解析しデータ構造の集合体に変換するプログラム)では要求された機能を使用できないときに発生する。(通常は発生しない)
- UnsupportedEncodingException : 指定された文字コードがサポートされていない場合に発生する。
- SAXException : SAX(Simple API for XML)でエラー、もしくは警告がある場合に発生する。基本的にはXMLのルールに則っていない場合に発生する。
- IOException : 入出力時の例外で発生する。
実際のメイン処理のところの説明をします。
まず、DocumentBuilderFactoryクラスのインスタンスを生成します。
1 |
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); |
次に作成したDocumentBuilderFactoryのインスタンスからメンバーメソッドを呼び出し、DocumentBuilderクラスのインスタンスを生成します。
1 |
DocumentBuilder builder = factory.newDocumentBuilder(); |
最後に作成したDocumentBuilderのインスタンスからメンバーのparseメソッドを呼び出しByteArrayInputStreamのインスタンスを無名で呼び出します。ByteArrayInputStreamの引数はバイト配列に変換したStringです。これを行うとDOMドキュメントが帰ってくるのでそのままリターンしています。
1 |
return builder.parse(new ByteArrayInputStream(argXML.getBytes("UTF-8"))); |
以上が文字列からDOMドキュメントへ変換する方法です。
覚書なのに結構書いてしまった。時間と体力ががが・・・。