2015-05-29 256 views
2

我尝试使用下面的代码 从.config扩展名的文件中获取值,但我无法获取它...........使用javascript从.config文件读取值

如果我更改文件extesion从的.config到.XML在其工作正常(我能acheive预期的结果)

//----------------------------------------------------- 

xmlDoc = new ActiveXObject('Microsoft.XMLDOM'); 
     xmlDoc.async = false; 
     var b = xmlDoc.load("books.config");//load a file 
document.write("<br>" + xmlDoc.length); 
     document.write("<br>" + xmlDoc.getElementsByTagName("book").length); 
     for (j = 0; j < xmlDoc.getElementsByTagName("book").length; j++) { 
      // x = xml.getElementsByTagName("FeatureToggles")[j].attributes; 
      x = xmlDoc.getElementsByTagName("book")[j].attributes; 
      y = x.getNamedItem("category"); 
      document.write("<br>" +"category = "+ x.getNamedItem("category").nodeValue); 
      document.write("<br>" + x.length); 
      if (x.getNamedItem("cover")!=null && x.getNamedItem("cover").nodeValue == "paperback") { 
       document.write("Found"); 
      } 
     } 

//----------------------------------------------------------------------------- 

Sample xml/config: 

<bookstore> 
<book category="cooking"> 
<title lang="en">Everyday Italian</title> 
<author>Giada De Laurentiis</author> 
<year>2005</year> 
<price>30.00</price> 
</book> 
<book category="children"> 
<title lang="en">Harry Potter</title> 
<author>J K. Rowling</author> 
<year>2005</year> 
<price>29.99</price> 
</book> 
<book category="web"> 
<title lang="en">XQuery Kick Start</title> 
<author>James McGovern</author> 
<author>Per Bothner</author> 
<author>Kurt Cagle</author> 
<author>James Linn</author> 
<author>Vaidyanathan Nagarajan</author> 
<year>2003</year> 
<price>49.99</price> 
</book> 
<book category="web" cover="paperback"> 
<title lang="en">Learning XML</title> 
<author>Erik T. Ray</author> 
<year>2003</year> 
<price>39.95</price> 
</book> 
</bookstore> 
+0

您是否必须使用activeX对象?如果不是强制性的,一个简单的ajax + js将能够解析你的xml。 –

+0

我能解析一个XML,但我想解析一个.config文件你可以请求帮助 –

+0

作为加载函数,我想你的服务器返回你的文件,你可以尝试手动调用http:// yourserver /books.config和http://yourserver/books.xml。如果前者失败,最有可能是因为你的web服务器没有配置为返回.config文件 –

回答

0

这可能是因为该load方法需要一个XML文件,您的浏览器不知道.config扩展名实际上是XML。如果您从服务器提供此文件,则可以添加适当的标头以告诉浏览器.config文件是XML。如果没有标题,您的浏览器必须尝试解决(此过程在此处记录:https://msdn.microsoft.com/en-us/library/ms775148%28v=vs.85%29.aspx)。如果这个假设是正确的,那么您在问题中设置的变量b(load方法的返回值)应该是false。

xmlSource:包含指定 XML文件位置的URL的字符串。

https://msdn.microsoft.com/en-us/library/ms762722%28v=vs.85%29.aspx

为了解决这个问题,你可以成为用正确的头文件(如果这是一个应用程序别人会用最好的方法),告诉你的浏览器处理.config文件的XML(可能不是一个好主意),或者只是使用.xml扩展名,因为这似乎是由浏览器自动映射的。

+0

使用实际的xml/config具有xml标头,(<?xml version =“1.0”encoding =“UTF- 8" ?>) –

+0

我必须做的事情使用简单的javascript读取配置文件 –

+0

是的,这也将解决我认为的问题;) – pherris

0

默认情况下,浏览器中的JavaScript不会从文件系统加载任意文件。

为了达到你想要什么:在浏览器中

  • 开始在目录中的小型服务器服务的index.html和配置
  • 这个过程

    1. 禁用CORS安全概述docs

      说明:完成后恢复您的浏览器设置,因为您正在有效禁用重要的安全措施。

      更新:我没有仔细阅读您的问题,并且docs提到本地XML可以工作。

    +0

    我早先尝试过XMLHttpRequest本身,但它在这种情况下没有帮助 –