我有这个javascript函数,可以从网站获取xml文件:
function getCCDfromHV() {
var xmlhttp;
if (window.XMLHttpRequest) xmlhttp=new XMLHttpRequest(); // code for IE7+, Firefox, Chrome, Opera, Safari
else xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");// code for IE6, IE5
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
var xml = xmlhttp.responseText;
document.getElementById("uploadResponse").innerHTML=xml;
xmlDom = createXmlDOM(xml);
}
}
xmlhttp.open("GET","../HVRawConnectorPHP/demo_app/GetCCDfromHV.php",true);
xmlhttp.send();
}
正如我从转储到 .innerHTML 中看到的那样,xml 被检索正常。 但是createXmlDOM的parseFromString失败,并显示"XML5619:不正确的文档语法",如下所示:
function createXmlDOM(xml) {
console.log('createXmlDOM: the first 255 chars=' +xml.substring(0,255));
if (window.DOMParser){
var parser=new DOMParser();
xmlDom=parser.parseFromString(xml,"text/xml"); //fails with XML5619: Incorrect document syntax.
}
else { // Internet Explorer
xmlDom=new ActiveXObject("Microsoft.XMLDOM");
xmlDom.async=false;
xmlDom.loadXML(xml);
}
return xmlDom;
}
但是,如果我复制 .innerHTML 文本并将其粘贴到编辑器中并将其另存为文本文件,使用 FileReader 加载该文件,然后将该文本发送到 createXmlDOM,它工作正常!
因此,不知何故,剪切和粘贴或文件写入和读取的行为会进行某种翻译,从而使parseFromString可以接受。 有没有办法在不保存和重新加载文件的情况下做到这一点? 它似乎在第一个字符"&"上失败,因为第一个字符实际上是"<",但 html 将其更改为 <,而从文本文件加载它则不会。
我终于想通了。 XML 需要 html 解码。 我添加了以下功能:
function htmlDecode(input){
var e = document.createElement('div');
e.innerHTML = input;
return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}
我从这里找到的:http://css-tricks.com/snippets/javascript/unescape-html-in-js/