如何使用javascript DOM解析这个XML?

时间:2014-01-18 05:02:23

标签: javascript xml

这是我的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>。但我不知道如何继续前进。 如果你知道,请给我一个答案。

1 个答案:

答案 0 :(得分:0)

您展示的内容不是有效的XML。它没有第一行表明它是一个XML文档。缺少以下行,这可能会在解析时导致问题。

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

如果您想要具有给定名称的a的所有子节点,您有两种方法可以执行此操作。

  • 您可以迭代所有节点,找到具有给定名称的节点并检索其所有子节点。修改你的代码片段,你可以将它们作为你的函数的结果返回并按你喜欢的方式进行(例如显示它们)。

    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;