Javascript 非常好的X-Path、Internet Explorer(IE 9)和;名称空间

Javascript 非常好的X-Path、Internet Explorer(IE 9)和;名称空间,javascript,dom,xpath,xmlhttprequest,Javascript,Dom,Xpath,Xmlhttprequest,最近,我尝试加入wgpath来修补IE 9缺乏适当的X路径支持,但在尝试使用名称空间时,我收到了一条奇怪的错误消息(«错误:错误标记:») 是否有人尝试将其用于从XHR响应获取的XML文档?我正在尝试以下方法: function evaluate(node, expression, namespaces) { var resolver = null; if(namespaces) { resolver = function(prefix) { return na

最近,我尝试加入wgpath来修补IE 9缺乏适当的X路径支持,但在尝试使用名称空间时,我收到了一条奇怪的错误消息(«错误:错误标记:»)

是否有人尝试将其用于从XHR响应获取的XML文档?我正在尝试以下方法:

function evaluate(node, expression, namespaces) {
    var resolver = null;

    if(namespaces) {
        resolver = function(prefix) { return namespaces[prefix]; };
    }
    else if(document.createNSResolver) {
        resolver = document.createNSResolver(node);
    }

    var results = document.evaluate(expression, node, resolver, XPathResult.ANY_TYPE, null);

    var value = null;
    switch(results.resultType) {
        case XPathResult.NUMBER_TYPE:
            value = results.numberValue;
            break;

        case XPathResult.STRING_TYPE:
            value = results.stringValue;
            break;

        case XPathResult.BOOLEAN_TYPE:
            value = results.booleanValue;
            break;

        case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
        case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
            value = [];
            var result = null;
            while(result = results.iterateNext()) {
                value.push(result);
            }
            break;

        case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:
        case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
            value = [];
            for(var index = 0; index < results.snapshotLength; ++index) {
                value.push(results.snapshotItem(index));
            }
            break;

        case XPathResult.ANY_UNORDERED_NODE_TYPE:
        case XPathResult.FIRST_ORDERED_NODE_TYPE:
            value = results.singleNodeValue;
            break;
    }

    return value;
};
函数求值(节点、表达式、名称空间){
var解析器=null;
if(名称空间){
解析器=函数(前缀){返回名称空间[前缀];};
}
else if(document.createNSResolver){
解析器=document.createNSResolver(节点);
}
var results=document.evaluate(表达式、节点、解析器、XPathResult.ANY_类型、null);
var值=null;
开关(results.resultType){
案例XPathResult.NUMBER\u类型:
value=results.numberValue;
打破
案例XPathResult.STRING\u类型:
value=results.stringValue;
打破
案例XPathResult.BOOLEAN\u类型:
value=results.booleanValue;
打破
案例XPathResult.UNORDERED\节点\迭代器\类型:
案例XPathResult.ORDERED\u节点\u迭代器\u类型:
值=[];
var结果=null;
while(result=results.iterateNext()){
推送(结果);
}
打破
案例XPathResult.UNORDERED\节点\快照\类型:
案例XPathResult.ORDERED\节点\快照\类型:
值=[];
对于(变量索引=0;索引
在IE中,当对从静态svg文件获取的XML文档计算“/svg:svg/svg:title/text()”时,它会失败

我做错什么了吗

此外,我注意到它可以与Chrome正常工作,但不能与Firefox正常工作。我收到以下错误消息:«ErrorDocumentError:节点不能用于创建它的文档之外的文档»


由于wgxpath安装在一个窗口上,我不确定如何为传入的XHR XML文档设置它…

您为
名称空间
参数传递了什么?也就是说,
document.evaluate()
知道
svg:
名称空间前缀吗?另外,不清楚您提到的两条错误消息之间的关系。错误文档错误仅在Firefox中发生?
名称空间
{“svg”:http://www.w3.org/2000/svg}
是的,Firefox会报告“ErrorDocumentError”。我之所以强调它,是因为下面的IE可能也有类似的情况:表达式是通过调用HTML文档对象的
evaluate
方法来计算的,而不是从XHR获取的XML文档,两者都不一样?我没有使用wgxpath,但您所说的有意义。。。XHR中的文档与HTML
文档
不同。我不知道如何在每个传入的XHR文档上安装wgxpath。您可以将传入的XHR文档复制到html文档中,但是如果它们很大,那将是相当浪费的。还有HTML/XML差异干扰的风险。然而,跨文档问题并不能解释“坏令牌”错误。