如何使用Dart获取指定XML元素的所有子节点?
如何用Dart xml包获取指定元素的所有子节点?
你的代码当前输出整个line元素,是因为你遍历的是符合条件的line元素本身,而非它的子data节点。以下是两种修正方案,可获取目标元素下的子节点并存入列表:
方案1:分步查找目标节点
先定位到id为1的line元素,再调用findElements('data')获取其下所有子data节点:
import 'package:xml/xml.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() { // 定位id为1的line元素 final targetLine = document.findAllElements('line') .firstWhere((line) => line.getAttribute('id') == '1'); // 获取该line下的所有data子节点并转为列表 final dataNodes = targetLine.findElements('data').toList(); // 遍历输出 dataNodes.forEach((node) => print('aaaa $node')); }
方案2:使用XPath直接定位
利用你已引入的xml/xpath包,通过XPath表达式直接定位目标子节点,代码更简洁:
import 'package:xml/xml.dart'; 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() { // XPath表达式:匹配所有id为1的line元素下的data子节点 final dataNodes = document.xpath('//line[@id="1"]/data').toList(); // 遍历输出 dataNodes.forEach((node) => print('aaaa $node')); }
两种方案的输出均符合你的预期:
aaaa <data id="D1" value="20"/> aaaa <data id="D2" value="40"/>
内容的提问来源于stack exchange,提问作者bangdt
相关产品推荐
相关产品推荐

