1
0

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.

Dartのxmlパッケージ(4.5.1)でparseEventsのこと

1
Last updated at Posted at 2021-01-04

取り合えずメモ。誤解も勘弁。
Dartでxmlを扱いたい。xmlパッケージがある。しかしドキュメントは当然ながら英語。いまいち使い方がよくわからない。
そんな中を手探りで見つけたXMLをSAXで解析するスッキリな方法のメモです。

インポート
import 'package:xml/xml_events.dart';
XMLデータ
    final bookshelfXml = '''<?xml version="1.0"?>
    <bookshelf>
      <book>
        <title lang="english">Growing a Language</title>
        <price>29.99</price>
      </book>
      <book>
        <title lang="english">Learning XML</title>
        <price>39.95</price>
      </book>
      <price>132.00</price>
    </bookshelf>''';
処理
    await Stream.fromIterable(parseEvents(bookshelfXml))
        .forEachEvent(onStartElement:(e) => print(e));
結果
<bookshelf>
<book>
<title lang="english">
<price>
<book>
<title lang="english">
<price>
<price>

Stream<XmlEvent>の拡張関数としてforEachEventが書かれているようでonStartElement以外にonEndElementなどなど必要そうなものがあります。

でも結局...

以下のようにbook内のことを処理するにはよくわからんかったから私は原始的な方法で使うことにしました。だって趣味だしどうせ趣味だし。

コード
    var it = parseEvents(bookshelfXml);
    var iterator = it.iterator;
    while (iterator.moveNext()) {
      var v = iterator.current;
      if (v is XmlStartElementEvent) {
        if (v.name == 'book') {
          print("Start:book");
          while (iterator.moveNext()) {
            var e = iterator.current;
            if (e is XmlEndElementEvent && e.name == "book") {
              print("End:book");
              break;
            } else {
              print(e.nodeType);
            }
          }
        }
      }
    }
結果
Start:book
XmlNodeType.TEXT
XmlNodeType.ELEMENT
XmlNodeType.TEXT
XmlNodeType.ELEMENT
XmlNodeType.TEXT
XmlNodeType.ELEMENT
XmlNodeType.TEXT
XmlNodeType.ELEMENT
XmlNodeType.TEXT
End:book
Start:book
XmlNodeType.TEXT
XmlNodeType.ELEMENT
XmlNodeType.TEXT
XmlNodeType.ELEMENT
XmlNodeType.TEXT
XmlNodeType.ELEMENT
XmlNodeType.TEXT
XmlNodeType.ELEMENT
XmlNodeType.TEXT
End:book

きれいに書けんものか...(TT)

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?