2014-01-18 171 views
0

這是我的XML如何使用JavaScript DOM解析此XML?

<colors> 
<SET name="temp"> 
    <menu>#9c7db5</menu> 
    <menuTxt>#ffffff</menuTxt> 
    <tH>#FFF</tH> 
    <tHTxt>#000</tHTxt> 
    <head>#919191</head> 
    <headTxt>#ffffff</headTxt> 
    <label>#2e2e2e</label> 
    <but>#8f8f8f</but> 
    <butTxt>#ffffff</butTxt> 
    <footer>#FFF</footer> 
    <footTxt>#000</footTxt> 
    <backT>#FFF</backT> 
</SET> 
<SET name="footercheck"> 
    <menu>#6492c4</menu> 
    <menuTxt>#ffffff</menuTxt> 
    <tH>#FFF</tH> 
    <tHTxt>#000</tHTxt> 
    <head>#4275b3</head> 
    <headTxt>#ffffff</headTxt> 
    <label>#0a0a66</label> 
    <but>#3b66a8</but> 
    <butTxt>#ffffff</butTxt> 
    <footer>#5f90b0</footer> 
    <footTxt>#ffffff</footTxt> 
    <backT>#FFF</backT> 
</SET> 
</colors> 

用戶將 '名' 搜索<SET>標籤的屬性。一旦給定的名字與任何<SET>標籤匹配,我需要獲取它的所有子節點值。 (<menu><menutxt> ..等)。

這是我到目前爲止已經試過,

function parseXML{ 
        if (window.XMLHttpRequest) 
     { 
      xmlhttp=new XMLHttpRequest(); 
     } 
     else 
     { 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     }var y; 
     xmlhttp.open("GET","style/userTheme.xml",false); 
     xmlhttp.send(); 
     xmlDoc=xmlhttp.responseXML; 
     var x=xmlDoc.getElementsByName(iid); //'iid' is user's input 
     for (var i = 0; i < x.length; i++) { 
      x[i].childNodes[0].nodeValue 
     } 
} 

我已經籤 'X',它的 '1' 的長度。所以它將整個XML過濾爲一個<SET>。但我不知道如何繼續下去。 如果您知道,請給我一個答案。

回答

0

你顯示的內容不是有效的XML。它沒有第一行表示它是一個XML文檔。以下行缺失,這可能會導致解析時出現問題。

<?xml version="1.0" encoding="UTF-8"?> 

如果你想要一個給定名稱的所有子節點,你有兩種方法。

  • 你可以遍歷所有的節點,找到一個給定的名字和檢索所有的孩子。修改你的代碼片段,你可以將它們作爲你的函數的結果返回並做任何你喜歡的事情(例如顯示它們)。

    var childrenNodes = new Array(); 
    
    for (var i = 0; i < x.length; i++) { 
        childrenNodes[i] = x[i].childNodes[0].nodeValue; 
    } 
    
    return childrenNodes; 
    
  • 另一種方式來做到這一點,將是查詢使用XQuery或XPath的特定元素的DOM並返回結果。

    var result = doc.evaluate('/form/set[name='+iid+']', xmlDoc, null, XPathResult.STRING_TYPE, null); 
    return result;