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