我有一个 XML 文件,其中包含 <?myinst contents ?>
形式的处理指令。我需要通过单个 DOM 查询将它们全部放入一个集合中,如果可能的话,使用 XMLDOM在 Node.js 上。如果不迭代所有树,这可能吗?
最佳答案
您必须使用 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
关于javascript - 是否可以使用XMLDOM获取所有处理指令元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13032046/