2013-05-06 66 views
-1

我需要離線保存數據,所以我將數據保存爲XML。我不知道如何使用JavaScript獲取XML對象。如何遍歷HTML文檔中的XML?

<xml id=xmlData> 
     <data> 
      <tb1> 
       <id>1</id> 
       <name>1</name> 
      </tb1> 
      <tb1> 
       <id>2</id> 
       <name>2</name> 
      </tb1> 
     </data> 
    </xml> 
    <html id="MainForm"> 
    <head id="Head1"> 

    </head> 
    <body> 
    <script type="text/javascript"> 
    var xmlDoc; 
    // code for IE 
    if (window.ActiveXObject) 
    { 
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
    } 
    // code for Mozilla, Firefox, Opera, etc. 
    else if (document.implementation.createDocument) 
    { 
    xmlDoc=document.implementation.createDocument("","",null); 
    } 
    else 
    { 
    alert('Your browser cannot handle this script'); 
    } 
    xmlDoc.async=false; 
    xmlDoc.load("");//how can i get the xml? 

    var x=xmlDoc.documentElement.childNodes; 

    for (var i=0;i<x.length;i++) 
    { 
    if (x[i].nodeType==1) 
     { 
     //Process only element (nodeType 1) nodes 
     document.write(x[i].nodeName + ": "); 
     document.write(x[i].childNodes[0].nodeValue); 
     document.write("<br />"); 
     } 
    } 
    </script> 
    </body> 
    </html> 
+0

這不會保存任何離線狀態以及無效的XML ......您必須使用Cookie或[localStorage](http://www.w3schools.com/html/html5_webstorage.asp)。 – Kiruse 2013-05-06 04:42:24

+0

你可以使用javascript變量將xml存儲爲字符串,並在需要時解析它。這個變量可以存儲在localStorage中。 – Sandeep 2013-05-06 04:52:32

+0

如果像xmlDoc.load(「文件名」)一樣寫入,則可以加載文檔;在online.using上面的代碼不能存儲數據在離線。爲此,你應該與本地存儲概念.compare到cookie本地存儲是最好的選擇。 – 2013-05-06 04:55:36

回答

0

試試這個:

var txt='<xml id=xmlData><data><tb1><id>1</id> <name>1</name></tb1><tb1><id>2</id><name>2</name></tb1></data></xml>'; 

if (window.DOMParser) 
{ 
    parser=new DOMParser(); 
    xmlDoc=parser.parseFromString(txt,"text/xml"); 
} 
else // Internet Explorer 
{ 
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async=false; 
    xmlDoc.loadXML(txt); 
} 
var x=xmlDoc.documentElement.childNodes; 

for (var i=0;i<x.length;i++) 
{ 
    if (x[i].nodeType==1) 
    { 
     //Process only element (nodeType 1) nodes 
     console.log(x[i].nodeName + ": "); 
     console.log(x[i].childNodes[0].nodeValue); 
     console.log("<br />"); 
    } 
} 

小提琴:http://jsfiddle.net/hB5E9/

+0

謝謝你的回答~~~我會盡力的 – 2013-05-06 06:46:25

0

我在文檔中使用局部變量來做到這一點。如果你可以將XML作爲一個對象的字符串屬性,那麼這可能是有用的 -

我在我的應用程序中有一些類似的用法。我通過服務調用從SQL Azure DB中讀取了一個「XML」列,並將此XML數據作爲服務返回對象的「字符串」屬性。

下面是我在做閱讀的是什麼:

_LocalVariable= XMLFromString(DataObject.Filter); 
        $.each($(_LocalVariable).find("Filter"), 
         function (index,filterDataItem) { 
         $filterDataItem =$(filterDataItem); 
         var tFilterType =$filterDataItem.find("FilterType").attr("class"); 
         var tOperator = $filterDataItem.find("Operator").attr("class"); 
         var tValue = $filterDataItem.find("Value").text(); 
         // Do more operations 
        }); 


//-------------------------------------------------------------------------------- 
//Parse XML from String 
//-------------------------------------------------------------------------------- 
function XMLFromString(pXMLString) { 
    if (!pXMLString) 
     pXMLString = "<FilterRule></FilterRule>"; 
    if (window.ActiveXObject) { 
     var oXML = new ActiveXObject("Microsoft.XMLDOM"); 
     oXML.loadXML(pXMLString); 
     return oXML; 
    } else { 
     return (new DOMParser()).parseFromString(pXMLString, "text/xml"); 
    } 
    } 

當我在數據庫中的XML是這樣的 -

<FilterRule> 
    <Filter id="1"> 
    <FilterType id="AB11">Ranking</FilterType> 
    <Operator id="1">Equal To</Operator> 
    <Value>1</Value> 
    </Filter> 
    <Filter id="2"> 
    <FilterType id="AB22">Segment</FilterType> 
    <Operator id="1">Equal To</Operator> 
    <Value>2</Value> 
    </Filter> 
    <Logic>Or</Logic> 
</FilterRule>