Возьмите этот XML пример:Как отфильтровать встроенные узлы XML?
<root>
<grandParent GPid="1" hidden="false">
<parent Pid="1" hidden="false">
<child Cid="1" hidden="false"/>
<child Cid="2" hidden="true"/>
</parent>
<parent Pid="2" hidden="false">
<child Cid="3" hidden="false"/>
<child Cid="4" hidden="false"/>
</parent>
</grandParent>
<grandParent GPid="2" hidden="false">
<parent Pid="3" hidden="false">
<child Cid="5" hidden="true"/>
</parent>
<parent Pid="4" hidden="true">
<child Cid="6" hidden="false"/>
</parent>
</grandParent>
<grandParent GPid="3" hidden="true">
<parent Pid="5" hidden="false">
<child Cid="7" hidden="false"/>
</parent>
</grandParent>
</root>
мне нужно какое-то фильтр, чтобы получить копию этого, где отмечены все узлы «скрытые», удаляются так:
<root>
<grandParent GPid="1" hidden="false">
<parent Pid="1" hidden="false">
<child Cid="1" hidden="false"/>
</parent>
<parent Pid="2" hidden="false">
<child Cid="3" hidden="false"/>
<child Cid="4" hidden="false"/>
</parent>
</grandParent>
<grandParent GPid="2" hidden="false">
<parent Pid="3" hidden="false"/>
</grandParent>
</root>
Я пытался использовать что-то как это
var newXML:XML = XML(root.([email protected] != "true").([email protected] != "true").([email protected] !=true);
Но что на самом деле просто возвращает мне исходный XML (так как я прошу корня, где будут выполнены эти условия я получаю корень). Я понимаю, почему мой подход не работает, но я не знаю, куда идти отсюда.
Я понимаю, что вы здесь делаете. Любая идея, если рекурсивная функция более или менее эффективна, чем циклы delete в моем ответе? – invertedSpear
Рекурсивная функция примерно в 30-50 раз эффективнее. Выполняя свой код 50 раз с этим, поскольку intial XML http://pastebin.com/f5f2e944d занимает среднее значение 110 мс. Шахта занимает 3 мс в среднем. – sberry
Вы можете улучшить скорость своего кода, чтобы получить среднее значение в 20 мс, просто изменив порядок ваших 3 для каждой петли (так что сначала цикл на grandParent, затем родительский, затем дочерний). Если вы не понимаете, почему это повышает скорость, дайте мне знать, и я могу объяснить. Разумеется, относительное увеличение полностью зависит от количества grandParent и родительских узлов со скрытым = «true». Если ни один из них не скрыт = «истина», тогда ваш код не работает быстрее, переупорядочивая ваш для каждого цикла. – sberry