Javascript 非常好的X-Path、Internet Explorer(IE 9)和;名称空间
最近,我尝试加入wgpath来修补IE 9缺乏适当的X路径支持,但在尝试使用名称空间时,我收到了一条奇怪的错误消息(«错误:错误标记:») 是否有人尝试将其用于从XHR响应获取的XML文档?我正在尝试以下方法: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
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差异干扰的风险。然而,跨文档问题并不能解释“坏令牌”错误。