我想要一个元素的所有子元素。
我尝试过以下方法:
import 'package:xml/xml.dart';
import 'dart:async';
import 'dart:io';
import 'package:xml/xpath.dart';
final bookshelfXml = '''
<?xml version="1.0" encoding="utf-8"?>
<document id="doc1">
<line id="1">
<data id="D1" value="20" />
<data id="D2" value="40" />
</line>
<line id="2">
<data id="D1" value="90" />
<data id="D2" value="340" />
</line>
</document>''';
final document = XmlDocument.parse(bookshelfXml);
void main() async {
var lines = document.findAllElements('document')
.first.findElements('line')
.where((line) => line.getAttribute('id') == '1')
.forEach((e) {print('aaaa $e');});
}
这里的期望是我将有一个数据元素列表,它们是 id=1 的行的子元素
aaaa <data id="D1" value="20"/>
aaaa <data id="D2" value="40"/>
但我有:
aaaa <line id="1">
<data id="D1" value="20"/>
<data id="D2" value="40"/>
</line>
我想将一个元素的所有子元素(通过元素的 id)放入列表中。但是对于dart中的xml包,我仍然没有找到如何获取它。
这样就可以了。当您附近有 XPath 时,无需机械行走...
import 'package:xml/xml.dart';
import 'package:xml/xpath.dart';
void main(List<String> arguments) {
final document = XmlDocument.parse(bookshelfXml);
final nodes = document.xpath('/document/line[@id="1"]/*');
for (final node in nodes) {
print('aaaa $node');
}
}
const bookshelfXml = '''
<?xml version="1.0" encoding="utf-8"?>
<document id="doc1">
<line id="1">
<data id="D1" value="20" />
<data id="D2" value="40" />
</line>
<line id="2">
<data id="D1" value="90" />
<data id="D2" value="340" />
</line>
</document>''';
这似乎打印出你想要的内容:
aaaa <data id="D1" value="20"/>
aaaa <data id="D2" value="40"/>