Можно ли получить все элементы инструкции обработки из 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