LoginSignup
16
18

More than 5 years have passed since last update.

JavaでXMLを取り込んでいろいろ

Posted at

何かと便利なXMLをJavaで扱うことができる。そのXMLを取り込んでいろいろやってみる。それぞれのクラスのインスタンス化が特殊なのが特徴。

java.xml.parsers編

DocumentBuilderFactory抽象クラス

XMLドキュメントからDOMツリーを生成するパーサーを取得できるファクトリAPIを定義する抽象クラス(Javadocより)。

まず、このクラスをインスタンスするには

DocumentBuilderFactory documentbuilderfactory = DocumentBuilderFactory.newInstance();

のようにnewせずにメソッドで(DocumentBuilderFactoryは抽象クラスのため、newでインスタンスを生成できない)インスタンスを生成する。

さらにちょっとした設定は

documentbuilderfactory.setIgnoringComments(true);
documentbuilderfactory.setNamespaceAware(true);
documentbuilderfactory.setXIncludeAware(true);

のようなメソッドを使って設定できる。

後述する、DocumentBuilder抽象クラスをインスタンスを生成するにはこのクラスで定義されているnewDocumentBuilderメソッドで次のようにインスタンスを生成する。

DocumentBuilder documentbuilder = documentbuilderfactory.newDocumentBuilder();

このクラスも抽象クラスなので、newでインスタンスを生成することはできない。

newInstanceメソッド

DocumentBuilderFactoryクラスをインスタンス化するためのメソッド。

setIgnoringCommentsメソッド

パーサー中にコメントを無視するか指定するメソッド。デフォルトではfalseになっており、無視されないようになっている。

setNamespaceAwareメソッド

パーサー中に名前空間をサポートするか指定するメソッド。デフォルトではfalseになっており、サポートされないようになっている。

setXIncludeAwareメソッド

XIncludeを発見したときの処理を指定するメソッド。デフォルトではfalseになっており、XIcludeが見つかっても無視する。

newDocumentBuilerメソッド

DocumentBuilder抽象クラスをインスタンス化するための抽象メソッド。

DocumentBuilder抽象クラス

XMLドキュメントからDocumentインスタンスを取得するための抽象クラス。

このクラスからDocumentを取得するときはnewDocumentメソッドでDocumentインターフェースをインスタンスするか、parseメソッドでDocumentオブジェクトを返すかである。

例えば、

Document document = documentbuilder.parse(new FileInputStream("test.xml"));

のように取得したいファイル(XMLとか)を指定して、Documentオブジェクトを取得できる。

parseメソッド

指定された内容をXMLドキュメントとして構文解析して、Documentオブジェクトを返すメソッド。

org.w3c.dom編

Documentインターフェース

HTML文書またはXML文書を表すインターフェース。

DocumentオブジェクトからElementオブジェクトを取得するには

Element element = document.getDocumentElement();

のようにgetDocumentElementメソッドを使うと良い。

getDocumentElementメソッド

ドキュメントから要素を取得して、Elementオブジェクトを返すメソッド。

Elementインターフェース

HTML文書またはXML文書内の要素を表すインターフェース。
このインターフェースでようやくXMLからタグを取得することができる。

タグの名前の取得方法は

element.getTagName()

で取得できる。

getTagNameメソッド

要素の名前を取得するメソッド。

NodeListインターフェース

順序付けられたノードのコレクションを扱うためのインターフェース。

例えば、リストのノードごとに項目を取得するには

for(int i = 0;i<nodelist.getLength();i++)
{
    nodelist.item(i);
}

のような感じ。

itemメソッド

リスト集合内での指定した番号の項目を返すメソッド。

getLengthメソッド

リスト内のノード数を返すメソッド。

Nodeインターフェース

DOMツリーのノードを表すためのインターフェース。

例えば、XMLで親要素が子要素があるかどうか確認するには、

Node node = nodelist.item(i);
Element prop = (Element)node;

if(prop.hasChildNodes())
{
    System.out.println("子要素あり");
}

これで取得した要素に子要素が存在するとturuを返す。

hasChildNodesメソッド

ノードが子ノードを持っているかどうかを判断するメソッド。子ノードがあるときはtrueを返す。

さいごに

まだまだJavaでXMLを扱うものは存在する。

16
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
18