Вложенные XML-теги в Dart
Теги могут вкладываться друг в друга. Тогда нужный узел ищут по имени среди потомков:
<root>
<block>
<caption>alpha</caption>
</block>
</root>
Сначала берут внешний элемент, затем внутренний по его имени:
import 'package:xml/xml.dart';
var xml = '''
<root>
<block>
<caption>alpha</caption>
</block>
</root>
''';
var doc = XmlDocument.parse(xml);
var root = doc.rootElement;
var block = root.getElement('block')!;
var caption = block.getElement('caption')!.innerText;
print(caption);
Несколько родительских тегов часто повторяют одну структуру дочерних полей:
<root>
<entry>
<word>alpha</word>
</entry>
<entry>
<word>beta</word>
</entry>
<entry>
<word>gamma</word>
</entry>
</root>
Каждый родитель обходят отдельно, текст берут у вложенного тега:
import 'package:xml/xml.dart';
var xml = '''
<root>
<entry><word>alpha</word></entry>
<entry><word>beta</word></entry>
<entry><word>gamma</word></entry>
</root>
''';
var doc = XmlDocument.parse(xml);
var root = doc.rootElement;
for (var entry in root.findElements('entry')) {
var word = entry.getElement('word')!.innerText;
print(word);
}
Дан следующий код:
import 'package:xml/xml.dart';
var xml = '''
<root>
<tag1>
<tag2>
<tag3>
text
</tag3>
</tag2>
</tag1>
</root>
''';
Выведите в консоль текст самого внутреннего тега.
Дан следующий код:
import 'package:xml/xml.dart';
var xml = '''
<root>
<user>
<name>john</name>
<surn>smit</surn>
</user>
<user>
<name>eric</name>
<surn>wils</surn>
</user>
<user>
<name>kyle</name>
<surn>tayl</surn>
</user>
</root>
''';
Выведите в консоль имя и фамилию каждого юзера.
Дан следующий код:
import 'package:xml/xml.dart';
var xml = '''
<root>
<product cost="100" amount="3">
<name>prod1</name>
<category>cat1</category>
</product>
<product cost="200" amount="4">
<name>prod2</name>
<category>cat2</category>
</product>
<product cost="300" amount="5">
<name>prod3</name>
<category>cat3</category>
</product>
</root>
''';
Выведите в консоль название, категорию, цену и количество каждого продукта.