You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:15:12