这是我的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 :(得分: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;