如何使用Dart Petitparser XML解析器执行“getElementsByTagName”?

时间:2014-03-04 16:05:14

标签: dart petitparser

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

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

对于我的测试xml文件中的665个“importantData”节点,result.value.children [1]中的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>

1 个答案:

答案 0 :(得分:1)

XmlNode比其所有孩子都Iterable<XmlNode>

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

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

如果您更喜欢函数式编程,可以使用以下表达式为所有相关元素返回一个iterable:

root.where((node) => node is XmlElement && node.name.local == 'importantData')