Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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,我有一个html文件,在那里我保存了一些注释和其他信息,我经常更新它,所以它变得相当大。问题是,如果我更改布局中的某些内容,它会变得非常麻烦,因为我必须在很多地方更改它。所以我有了一个想法,将所有数据转换成XML,并用XSLT将其转换成HTML 这立刻让我想到了第一个问题:我无法访问XML 我尝试的第一件事是通过XMLHttpRequest加载它: function loadXMLDoc(filename) { if (window.ActiveXObject) {

我有一个html文件,在那里我保存了一些注释和其他信息,我经常更新它,所以它变得相当大。问题是,如果我更改布局中的某些内容,它会变得非常麻烦,因为我必须在很多地方更改它。所以我有了一个想法,将所有数据转换成XML,并用XSLT将其转换成HTML

这立刻让我想到了第一个问题:我无法访问XML

我尝试的第一件事是通过XMLHttpRequest加载它:

function loadXMLDoc(filename)
{
    if (window.ActiveXObject)
    {
        xhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    else
    {
        xhttp = new XMLHttpRequest();
    }
    xhttp.open("GET", filename, false);
    xhttp.setRequestHeader('Content-Type', 'application/xml');
    try {xhttp.responseType = "msxml-document"} catch(err) {} // Helping IE11
    xhttp.send("");
    return xhttp.responseXML;
}
但这会被“原因:CORS请求不是HTTP”阻止。我知道为什么我会得到它,而且我也知道在使用XMLHttpRequest时很可能没有办法解决这个问题。(除了篡改本地浏览器安全性,我不想这样做)

我的下一个想法是将XML作为字符串直接放入脚本中,然后将其解析为XML文档。比如:

var rawXml = "
<?xml version="1.0" encoding="UTF-8"?>
<foo>
    <bar/>
    <bar/>
</foo>
";
var rawXml=”
";
但这给了我一个“未捕获的SyntaxError:”字符串文字包含一个未转换的行”。显然javascript不支持任何形式的逐字字符串,我必须用一个。我的问题是,我将失去漂亮的格式。因此,阅读和编辑XML将是一件痛苦的事情。这绝对是我想要避免的事情

编辑: 感谢@Taplar指出,我可以使用模板文字,这使得后一种方法可以工作。 这个解决方案不是最优的,因为我使用NotePad++并且我可以对HTML或XML使用语法高亮显示,再加上XML工具语法自动检查会被所有HTML代码搞乱。但到目前为止,这是我拥有的最好的解决方案。如果还有其他选择,我想听听


(正如其他人已经指出的那样,使用
input type=file
,这对我来说不是真正可行的解决方案。我想打开HTML文档并阅读它。但是对于输入元素,我必须首先选择XML和XSL。这有点麻烦,我更喜欢XML作为字符串解决方案)

您应该将
XMLHttpRequestInstance.responseType
设置为
'document'

函数loadXMLDoc(文件名,func){
const x=新的XMLHttpRequest;
x、 打开('GET',filename);x.responseType='document';
x、 onload=d=>{
func(d);
}
x、 send();
返回x;
}
//以下是您将如何执行
loadXMLDoc('yourFile.xml',d=>{
const productNodeList=d.getElementsByTagName(“产品”);

});
您应该将
XMLHttpRequestInstance.responseType
设置为
'document'

函数loadXMLDoc(文件名,func){
const x=新的XMLHttpRequest;
x、 打开('GET',filename);x.responseType='document';
x、 onload=d=>{
func(d);
}
x、 send();
返回x;
}
//以下是您将如何执行
loadXMLDoc('yourFile.xml',d=>{
const productNodeList=d.getElementsByTagName(“产品”);


});
您必须使用
输入类型=文件
来选择文件。您不能在浏览器中按名称读取文件。仅供参考:除非您处理的是旧浏览器,否则不要使用window。ActiveXObject
字符串不允许使用文字新行,除非它们被转义。此外,您的嵌套也有“代码>”/代码>,这会导致字符串过早地终止,即使您没有新的行字符。您应该考虑交换到模板文字(<代码>”/代码>。@DanielA.White这意味着,我必须打开html文档,然后单击按钮并选择一个文件。这有点麻烦。@Nikolaus出于安全原因,这样做了。您必须使用
input type=file
来选择文件。您不能在浏览器中按名称读取文件。仅供参考:除非您正在处理h在旧浏览器中,不要使用Windows。ActiveXObject
字符串不允许文本新行,除非它们被转义。此外,嵌套具有
,这将导致字符串提前终止,即使您没有新行字符。你应该考虑交换一个模板文本(<代码> '/COD>),它允许Bo..Daielel.Wald,这意味着,我必须打开HTML文档,点击按钮并选择一个文件。这有点麻烦。@Nikolaus这样做是出于安全原因,这让我犯了同样的错误:
“原因:CORS请求不是HTTP”
如果您从
localhost
进行测试,您的问题很可能是您的服务器通过FTP而不是HTTP提供服务。修复主机设置。不涉及服务器。我只是在显示一个文件,它位于我的文件系统中。浏览器中的地址栏如下所示:
file:///C:/sample.html
这是您的问题。您使用的是
文件
协议,而不是
http
。您可以在没有服务器的情况下使用,但这是非标准的,只允许沙盒访问。你应该有一个服务器。您将如何为您的网页提供服务?我只想使用服务器,然后转到http
。我不提供任何网页,也不打算提供任何网页。它只是一个HTML文件(原始文章的第一句话),它位于我的OneDrive中。这会给我带来相同的错误:
“原因:CORS请求不是http”
如果您从
localhost
进行测试,您的问题很可能是您的服务器通过FTP而不是HTTP提供服务。修复主机设置。不涉及服务器。我只是在显示一个文件,它位于我的文件系统中。浏览器中的地址栏如下所示:
file:///C:/sample.html
这是您的问题。您使用的是
文件
协议,而不是
http
。您可以在没有服务器的情况下使用,但这是非标准的,只允许沙盒访问。你应该有一个服务器。您将如何为您的网页提供服务?我只需要使用一个服务器,然后转到http
http
。我不提供任何网页,也不打算提供任何网页。它只是一个HTML文件(原始文章的第一句话),位于我的OneDrive中。