Index
xmlというパッケージを使用していきます。
公式ドキュメントにも記載されていますが、以下の点に注意してください。
文字列からxmlを読み込んで、パースできる状態にするコードは以下の通り。
変数documentの型はxmlDocumentとなっており、この変数を起点に様々なパースをしていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
void readXML() { const bookshelfXml = '''<?xml version="1.0"?> <bookshelf> <book> <title lang="en">Growing a Language</title> <price>29.99</price> </book> <book> <title lang="en">Learning XML</title> <price>39.95</price> </book> <price>132.00</price> </bookshelf>'''; final document = XmlDocument.parse(bookshelfXml); |
documentを出力した結果は以下の通りで、そのまま出力されていることがわかります。
1 2 3 4 5 6 7 8 9 10 11 12 |
flutter: <?xml version="1.0"?> <bookshelf> <book> <title lang="en">Growing a Language</title> <price>29.99</price> </book> <book> <title lang="en">Learning XML</title> <price>39.95</price> </book> <price>132.00</price> </bookshelf> |
ちなみにxmlの読み込みに失敗すると例外が投げられます。
ファイルからxmlを読み込むときは以下の方法で読み込めます。
1 2 |
final file = new File('bookshelf.xml'); final document = XmlDocument.parse(file.readAsStringSync()); |
childrenメソッドで取得できます。
1 2 |
final document = XmlDocument.parse(_bookshelfXml); final result = document.children; |
resultを出力した結果は以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 |
flutter: [<?xml version="1.0"?>, , <bookshelf> <book> <title lang="en">Growing a Language</title> <price>29.99</price> </book> <book> <title lang="en">Learning XML</title> <price>39.95</price> </book> <price>132.00</price> </bookshelf>] |
XMLの構造から推測すると以下の三つの要素ごとにわけてリストとして取得できているっぽい。
- XML宣言部:<?xml version=”1.0″?>
- DTD:今回はないので空
- XML本体:<bookshelf>〜</bookshelf>まで
findAllElements()メソッドで特定のタグを持つ要素を検索できる。
1 2 |
final document = XmlDocument.parse(_bookshelfXml); final reslut = document.findAllElements('title'); |
resultを出力すると以下のようになる。
1 |
<title lang="en">Growing a Language</title>, <title lang="en">Learning XML</title> |
またタグの中身だけ取り出したい場合は以下のようにmapを使えば良い。
1 2 |
final document = XmlDocument.parse(_bookshelfXml); final reslut = document.findAllElements('title').map((node) => node.text); |
resultを出力すると以下のようになる。
1 |
(Growing a Language, Learning XML) |