是否可以从DOM获取所有处理指令元素

时间:2012-10-23 13:52:29

标签: xml node.js dom xmldom processing-instruction

我有一个XML文件,其中包含<?myinst contents ?>形式的处理说明。如果可能的话,我需要在一个集合中使用单个DOM查询获取所有这些内容。如果不对所有树进行迭代,这可能吗?

1 个答案:

答案 0 :(得分: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