0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

XmlPullParserからDocumentを作成する

Last updated at Posted at 2016-05-27

AndroidにはXMLを読み込みながらストリーミング処理するXmlPullParser APIと、XML文書を全て読みこんでから処理するDOM (Document) APIがあります。
基本的には目的に応じて好きな方を使えばよいのですが、R.xmlリソースIDからXMLを取得するContext.getResources().getXml()はXmlPullParserしか取得できないため、そのままではDOM APIを用いて実装した処理に渡すことができません。そこで、XmlPullParserからDocumentを作成する処理を作りました。

Document from(XmlPullParser parser) throws ParserConfigurationException, IOException, XmlPullParserException {
  Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();

  Node parent = document;
  int type;

  while (true) {

    type = parser.next();
    if (type == XmlPullParser.END_DOCUMENT) break;

    switch (type) {
      // タグの開始
      case XmlPullParser.START_TAG:
        Element element = document.createElement(parser.getName());

        // 要素の属性を設定
        for (int i = 0; i < parser.getAttributeCount(); i++) {
          String attr = parser.getAttributeName(i);
          String value = parser.getAttributeValue(i);
          element.setAttribute(attr, value);
        }

        // 親に追加
        parent.appendChild(element);

        // 自分を親にする
        parent = element;
        break;

      // タグの終了
      case XmlPullParser.END_TAG:
        // 親の親が次の親
        parent = parent.getParentNode();
        break;
    }
  }

  return document;
}

DOMのAPIはAndroidではなく標準のJavaにも含まれているので、Android以外にも利用可能なXML処理を実装するのにはDOMのAPIを使った方が便利かもしれませんね。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?