Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript从本地文件夹读取XML文件_Javascript_Xml - Fatal编程技术网

使用Javascript从本地文件夹读取XML文件

使用Javascript从本地文件夹读取XML文件,javascript,xml,Javascript,Xml,我试图学习如何读入XML文件中的网页数据。这是一个静态HTML页面。我不想要web服务器,也不能使用Ajax。XML文件与HTML文件位于同一目录中。我想让它在Chrome浏览器中工作 我需要做的是: 读取页面onLoad事件上的XML文件。 使用innerHTML将XML数据插入到div中。 我的问题是读取XML文件。我认为,我发现的所有示例只有在web服务器运行时才有效,这是我必须避免的。如果您正在阅读另一个文件,使用前端JS的唯一方法是另一个请求ajax。如果是node.js,则会有所不同

我试图学习如何读入XML文件中的网页数据。这是一个静态HTML页面。我不想要web服务器,也不能使用Ajax。XML文件与HTML文件位于同一目录中。我想让它在Chrome浏览器中工作

我需要做的是:

读取页面onLoad事件上的XML文件。 使用innerHTML将XML数据插入到div中。
我的问题是读取XML文件。我认为,我发现的所有示例只有在web服务器运行时才有效,这是我必须避免的。

如果您正在阅读另一个文件,使用前端JS的唯一方法是另一个请求ajax。如果是node.js,则会有所不同,因为node可以访问文件系统。或者,如果在同一页面上将xml转换为javascript字符串,则可以对其进行操作。jquery的parseXML有很多很好的库。

因为您只针对Chrome,所以您可以看看。您必须提示用户选择该文件或将其放入页面的特定区域,这可能是您希望避免的,也可能不是。以下内容应该会有所帮助。

假设HTML、XML和浏览器都在同一台机器上,您可以尝试在HTML中使用Iframe,使用类似URL的文件引用XML:\。

您可以这样做:

<html>
<head>
<script type="text/javascript">
//If using jQuery, select the tag using something like this to manipulate  
//the look of the xml tags and stuff.
$('#xframe').attr('style', 'thisxmltag.....');
</script>
</head>
<body>
...
<frame id="xframe" src="the_xml_doc"></src>
</body>
</html>
与IE11合作

<head>
    // To be hidden with a better method than using width and height
    <OBJECT id="data1" data="data.xml" width="1px" height="1px"></OBJECT>

    // to work offline
    <script src="lib/jquery-2.2.3.min.js"></script>
</head>

<body>
    <script>
    var TheDocument = document.getElementById("data1").contentDocument;
    var Customers = TheDocument.getElementsByTagName("myListofCustomers");
    var val1 = Customers[0].getElementsByTagName("Name")[0].childNodes[0].nodeValue;
原始答案如下:

所以,我可能会在派对上迟到一点,但这是为了帮助那些一直在寻找解决办法的人

首先,如果您没有在服务器上运行HTML文件,那么浏览器中需要允许CORS。其次,我发现大多数人在这类线程中引用的代码片段不适用于加载本地XML文件。请尝试以下来自官方文档的示例:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'file.xml', true);

xhr.timeout = 2000; // time in milliseconds

xhr.onload = function () {
  // Request finished. Do processing here.
  var xmlDoc = this.responseXML; // <- Here's your XML file
};

xhr.ontimeout = function (e) {
  // XMLHttpRequest timed out. Do something here.
};

xhr.send(null);
如果您引用的是本地文件,那么xhr.open中的方法1st arg将被忽略,而async 3rd arg在默认情况下为true,因此您只需指向您的文件,然后解析结果=


祝你好运

可能重复的XML在哪里?服务器端还是浏览器?我认为HTML和XML与浏览器都在同一个系统上。是的,它们都在,但不能两者兼有。如果运行包含脚本的html文件,则该文件也不能是xml文件。不过,您可以在javascript变量中包含一些xml。我想说的一点是,你不能加载另一个没有ajaxIt的文件。它看起来像一些方法,可以给出一些示例代码。如何在浏览器中启用CORS?在快速谷歌搜索后,我发现了这篇文章:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'file.xml', true);

xhr.timeout = 2000; // time in milliseconds

xhr.onload = function () {
  // Request finished. Do processing here.
  var xmlDoc = this.responseXML; // <- Here's your XML file
};

xhr.ontimeout = function (e) {
  // XMLHttpRequest timed out. Do something here.
};

xhr.send(null);