我有一个XML文件,结构如下:
<FIELDS>
<GRP1>
<OPTION>
<VALUE>71</VALUE>
<CONTENT>Text</CONTENT>
</OPTION>
...
...
</GRP1>
<GRP2>
<OPTION>
<VALUE>77</VALUE>
<CONTENT>Test</CONTENT>
</OPTION>
</GRP2>
...
...
</FIELDS>
我需要将<OPTIONS>
的所有子节点的节点值作为父节点获取<GRP1>
。
我尝试了以下代码,但它不起作用:
// [...]
var xmlGRP = xmlDoc.getElementsByTagName(GRP1);
xmlvalue = xmlGRP.childNodes[0].childNodes[0].firstChild.nodeValue;
xmlcontent = xmlGRP.childNodes[0].childNodes[1].firstChild.nodeValue;
有谁能告诉我我的代码有什么问题?
答案 0 :(得分:1)
除非您定义了名为GRP1
的变量,否则该变量应为字符串'GRP1'
。
xmlGRP
直接是NodeList,而不是Node;你不需要查看它上面的childNodes
属性。
由于空格处理方面的潜在差异,访问编号childNodes
是不可靠的。
对于空字符串的情况,访问firstChild
会失败,因为该元素没有Text节点子节点。
尝试类似:
var grp1 = xmlDoc.getElementsByTagName('GRP1')[0];
var firstOption = grp1.getElementsByTagName('OPTION')[0];
var value = firstOption.getElementsByTagName('VALUE')[0].textContent;
var content = firstOption.getElementsByTagName('CONTENT')[0].textContent;
(请注意,textContent
是IE Level及以下版本不支持的DOM Level 3 Core属性。如果您需要支持该浏览器,您可以使用类似工作,例如:)
function getTextContent(node) { // not 100% DOM3 compliant... good enough
if ('textContent' in node)
return node.textContent;
var texts = [];
for (child = node.firstChild; child!==null; child = child.nextSibling) {
if (child.nodeType===1) // ELEMENT_NODE
texts.push(getTextContent(child));
else if (child.nodeType===3 || child.nodeType===4) // TEXT_NODE, CDATA_SECTION_NODE
texts.push(child.data);
}
return texts.join('');
}