2015-05-29 260 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本身,但它在這種情況下沒有幫助 –