XML 解析在 Chrome 中不起作用
XML Parsing not Working in Chrome
对于 XML 字符串,例如:
var xml_string = '<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header/> <env:Body> <dn:response id="?" xmlns:dn="http://www.datanomic.com/ws"> <dn:record> <dn:Result>John</dn:Result> </dn:record> <dn:record> <dn:Result>Johnghghg</dn:Result> </dn:record> <dn:record> <dn:Result>Johnn</dn:Result> </dn:record> <dn:record> <dn:Result>Johnngy</dn:Result> </dn:record> <dn:record> <dn:Result>Johnnnn</dn:Result> </dn:record> <dn:record> <dn:Result>Johnny</dn:Result> </dn:record> <dn:record> <dn:Result>Johns</dn:Result> </dn:record> <dn:record> <dn:Result>Johnson</dn:Result> </dn:record> <dn:record> <dn:Result>Johnston</dn:Result> </dn:record> </dn:response> </env:Body></env:Envelope>';
我正在使用以下代码(从 SO 本身获得)
if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(xml_string,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(xml_string);
}
var nodes = xmlDoc.getElementsByTagName("dn:Result");
console.log(nodes); // returning empty on Chrome, working fine in Firefox and IE10
如果我从 getElementsByTagName
中删除 dn:
,它开始在 Chrome 中工作,但在 Firefox 和 IE 中不工作。那么有没有解决方案可以在所有 3
浏览器?
这里是 fiddle 为了便于测试:JSFiddle
PS:jQuery 不是一个选项。我希望这可以通过普通的旧 Javascript 单独完成。
我建议使用 W3C DOM 2 级方法 getElementsByTagNameNS
(如果可用),请参阅 http://jsfiddle.net/bygx406g/,它将一行更改为
var nodes = typeof xmlDoc.getElementsByTagNameNS != 'undefined' ? xmlDoc.getElementsByTagNameNS('http://www.datanomic.com/ws', 'Result') : xmlDoc.getElementsByTagName("dn:Result");
对于 XML 字符串,例如:
var xml_string = '<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header/> <env:Body> <dn:response id="?" xmlns:dn="http://www.datanomic.com/ws"> <dn:record> <dn:Result>John</dn:Result> </dn:record> <dn:record> <dn:Result>Johnghghg</dn:Result> </dn:record> <dn:record> <dn:Result>Johnn</dn:Result> </dn:record> <dn:record> <dn:Result>Johnngy</dn:Result> </dn:record> <dn:record> <dn:Result>Johnnnn</dn:Result> </dn:record> <dn:record> <dn:Result>Johnny</dn:Result> </dn:record> <dn:record> <dn:Result>Johns</dn:Result> </dn:record> <dn:record> <dn:Result>Johnson</dn:Result> </dn:record> <dn:record> <dn:Result>Johnston</dn:Result> </dn:record> </dn:response> </env:Body></env:Envelope>';
我正在使用以下代码(从 SO 本身获得)
if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(xml_string,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(xml_string);
}
var nodes = xmlDoc.getElementsByTagName("dn:Result");
console.log(nodes); // returning empty on Chrome, working fine in Firefox and IE10
如果我从 getElementsByTagName
中删除 dn:
,它开始在 Chrome 中工作,但在 Firefox 和 IE 中不工作。那么有没有解决方案可以在所有 3
浏览器?
这里是 fiddle 为了便于测试:JSFiddle
PS:jQuery 不是一个选项。我希望这可以通过普通的旧 Javascript 单独完成。
我建议使用 W3C DOM 2 级方法 getElementsByTagNameNS
(如果可用),请参阅 http://jsfiddle.net/bygx406g/,它将一行更改为
var nodes = typeof xmlDoc.getElementsByTagNameNS != 'undefined' ? xmlDoc.getElementsByTagNameNS('http://www.datanomic.com/ws', 'Result') : xmlDoc.getElementsByTagName("dn:Result");