允许用户在客户端打开xml文件,并使用javascript对其进行解析

允许用户在客户端打开xml文件,并使用javascript对其进行解析,javascript,xml,html,client-side,Javascript,Xml,Html,Client Side,我试图让我的站点上的用户在本地机器上保存一个XML文件,然后稍后使用HTML文件元素加载它们 使用iFrame保存文件 当试图让用户加载文件时,我总是遇到异常。 我在网上找到的每一件事都试过了,但似乎都找不到办法 我遇到了各种各样的异常,比如跨域或XMLHttpRequest无法加载file:///C:/fakepath/Regions.xml. 跨源请求仅支持HTTP。 取决于我试过的代码 我读到HTML5标准将url替换为“fakepath”,但找不到解决方案。是否无法让用户从自己的计算机加

我试图让我的站点上的用户在本地机器上保存一个XML文件,然后稍后使用HTML文件元素加载它们

使用iFrame保存文件

当试图让用户加载文件时,我总是遇到异常。 我在网上找到的每一件事都试过了,但似乎都找不到办法

我遇到了各种各样的异常,比如跨域或XMLHttpRequest无法加载file:///C:/fakepath/Regions.xml. 跨源请求仅支持HTTP。 取决于我试过的代码

我读到HTML5标准将url替换为“fakepath”,但找不到解决方案。是否无法让用户从自己的计算机加载要编辑的文件从服务器加载特定的文件不是问题,但我想给用户这种自由,而不是让他们决定加载什么文件,并且让他们在计算机上而不是服务器上保存和加载xml

这个问题有解决办法吗

找到了这些代码,但都没有帮助(我也尝试了一些其他的验证):

1)

2)

有人知道有没有办法解决这个问题吗?当然,您需要在服务器上保存文件吗

非常感谢大家
Erez

我想你在寻找HTML5的新功能。对于IE<10,您需要使用

这段代码在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" />

函数doit(e){
var files=e.target.files;
var reader=new FileReader();
reader.onload=函数(){
var parsed=new DOMParser().parseFromString(this.result,“text/xml”);
console.log(已解析);
};
reader.readAsText(文件[0]);
}
document.getElementById(“selectfile”).addEventListener(“更改”,doit,false);​

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);
}
<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" />