1

我有一个 XML 文件,其中包含<?myinst contents ?>. 如果可能的话,我需要使用单个 DOM 查询将它们全部放在一个集合中。如果不遍历所有树,这可能吗?

4

1 回答 1

0

您必须使用 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

于 2012-10-23T15:23:32.510 回答