Можно ли получить все элементы инструкции обработки из DOM

У меня есть файл XML, который содержит инструкции по обработке в виде <?myinst contents ?>, Мне нужно собрать их все в коллекцию, по возможности, одним запросом DOM. Возможно ли это без итерации по всему дереву?

1 ответ

Решение

Вы должны перебирать дерево с помощью xml-dom. Реализация, на которую вы указали, фактически использует полную итерацию даже для getElementByID или для других методов выбора. В лучших реализациях использовались бы кэши tagName и id... Если ваша цель - полная совместимость уровней (общность кода браузера и nodejs), у вас просто нет других вариантов, кроме фильтра на основе рекурсии, что-то вроде этого.

function _visitNode(node,callback){
    if(callback(node)){
        return true;
    }
    if(node = node.firstChild){
        do{
            if(_visitNode(node,callback)){return true}
        }while(node=node.nextSibling)
    }
}

function getPIs(rootNode){
  var ls = [];
  _visitNode(rootNode, function(node){
     if(node !== rootNode && node.nodeType == 7) {
       ls.push(node);
       return true;
     }
   });
   return ls;
}

Мы используем libxmljs и xslt для выбора вещей, но только для PI это может быть излишним... HTH

Другие вопросы по тегам