1

我可能在某个地方忽略了它,但是通过 PetitParser 的 Dart 版本获取特定名称的所有元素(类似于旧的 getElementsByTagName)的好方法是什么?

我设法加载了一个 XML 文件并使用 PetitParser 成功解析它,但现在我想通过具有特定名称的所有节点(例如,参见下面的带有“importantData”的节点)。

对于我的测试 xml 文件中位于 result.value.children[1].children 的 665 个“importantData”节点,result.value.length 似乎也非常高(16654)

<xml>
  <toplevel>
    <importantData>
       <attribute1>Value</attribute1>
       <attribute2>Value</attribute2>
    </importantData>
    <importantData>
       <attribute1>Value</attribute1>
       <attribute2>Value</attribute2>
    </importantData>
    <importantData>
       <attribute1>Value</attribute1>
       <attribute2>Value</attribute2>
    </importantData>
    ...
  </toplevel>
</xml>
4

1 回答 1

2

XmlNode是它所有的Iterable<XmlNode>孩子。

如果root是您的 XML 树的已解析根节点,您可以编写:

for (var node in root) {
  if (node is XmlElement && node.name.local == 'importantData') {
    // do something with the node
  }
}

如果您更喜欢函数式编程,则可以使用以下表达式返回所有相关元素的可迭代对象:

root.where((node) => node is XmlElement && node.name.local == 'importantData')
于 2014-03-04T18:52:23.377 回答