如何用dart获取xml元素的子元素?

问题描述 投票:0回答:1

我想要一个元素的所有子元素。

我尝试过以下方法:

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包,我仍然没有找到如何获取它。

xml dart element children
1个回答
0
投票

这样就可以了。当您附近有 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"/>
© www.soinside.com 2019 - 2024. All rights reserved.