让用户在客户端上打开一个xml文件并使用javascript解析它
作者:互联网
我试图让我的网站上的用户将XML文件保存到本地计算机,然后再使用HTML文件元素加载它们.
保存文件使用iFrame完成的操作.
当试图让用户加载文件时,我一直都会遇到异常.
我已经尝试过我能在网上找到的所有东西,似乎无法找到方法.
我得到了各种异常,比如跨域或XMLHttpRequest无法加载file:/// C:/fakepath/Regions.xml.仅支持HTTP的跨源请求.
根据我尝试的代码.
我读到HTML5标准用“fakepath”替换url,并且找不到解决方案.有没有办法让用户从他自己的计算机加载文件进行编辑?从服务器加载一个特定的文件不是问题,但我想给用户这个自由,而不是决定加载什么文件,还让他们在他们的计算机而不是服务器上保存和加载xml
有这个问题的解决方案吗?
发现这些代码但没有帮助(我已经尝试了很少的其他验证):
1)
var error = "";
strFile = document.frmLoadFile.selectedFile.value;
intPos = strFile.lastIndexOf("\\");
strDirectory = strFile.substring(0, intPos);
//alert(strDirectory);
document.frmLoadFile.selectedFile.value = strDirectory;
var file = 'file:\\\\\\' + document.frmLoadFile.selectedFile.value;
try //Internet Explorer
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.load(file);
}
catch (e) {
try //Firefox, Mozilla, Opera, etc.
{
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.async = false;
xmlDoc.load(file);
}
catch (e) {
try //Google Chrome
{
var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET", file, false);
xmlhttp.send(null);
xmlDoc = xmlhttp.responseXML.documentElement;
}
catch (e) {
error = e.message;
}
}
}
2)
var xmlDoc;
var xmlloaded = false;
function xml_initLibrary(file) {
importXML(file);
}
function importXML(xmlfile) {
try {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", xmlfile, false);
}
catch (Exception) {
var ie = (typeof window.ActiveXObject != 'undefined');
if (ie) {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
while (xmlDoc.readyState != 4) { };
xmlDoc.load(xmlfile);
xmlloaded = true;
readXML();
}
else {
xmlDoc = document.implementation.createDocument("", "", null);
xmlDoc.onload = readXML;
xmlDoc.load(xmlfile);
xmlloaded = true;
}
}
if (!xmlloaded) {
xmlhttp.setRequestHeader('Content-Type', 'text/xml')
xmlhttp.send("");
xmlDoc = xmlhttp.responseXML;
xmlloaded = true;
readXML();
}
}
function readXML() {
//console.log(xmlDoc);
}
有没有人知道是否有办法解决这个问题?你需要保存服务器上的文件吗?
非常感谢你们
埃雷兹
解决方法:
我想你正在寻找新的HTML5 FileReader.对于IE< 10你需要使用ActiveX FileSystemObject.
此代码适用于Chrome.
<script type="text/javascript">
function doit(e) {
var files = e.target.files;
var reader = new FileReader();
reader.onload = function() {
var parsed = new DOMParser().parseFromString(this.result, "text/xml");
console.log(parsed);
};
reader.readAsText(files[0]);
}
document.getElementById("selectfile").addEventListener("change", doit, false);
</script>
<input type="file" id="selectfile" />
标签:javascript,html5,xml,client-side 来源: https://codeday.me/bug/20190901/1784981.html