2014-03-04 8 views
0

Возможно, я пропустил его где-нибудь, но какой хороший способ получить все элементы определенного имени (похоже на старое getElementsByTagName) через Dart версию PetitParser?Как сделать «getElementsByTagName» с помощью парсера XML Dart Petitparser?

Мне удалось загрузить XML-файл и успешно проанализировать его с помощью PetitParser, но теперь я хочу пройти через все узлы с определенным именем (например, см. Ниже узлы с «importantData»).

result.value.length также, кажется, очень высокий (16654) для 665 узлов "importantData" из моего файла тест XML, которые находятся в result.value.children [1] .children

<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

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') 
+0

Спасибо, куча Лукаса, это было именно то, что я был после! – Geert

 Смежные вопросы

  • Нет связанных вопросов^_^