getElementsByTagName不会返回所有子节点

时间:2018-09-28 13:06:44

标签: javascript xml xml-parsing getelementsbytagname

我的XML字符串是

str = "<ROOT><CATEGORY_AREA_LIST><CATEGORY_AREA NAME='General'><CATEGORY_TYPE NAME='MOC'><PROPOSED_LEVEL NAME='3'></PROPOSED_LEVEL></CATEGORY_TYPE><CATEGORY_TYPE NAME='General'><PROPOSED_LEVEL NAME='3'></PROPOSED_LEVEL></CATEGORY_TYPE></CATEGORY_AREA><CATEGORY_AREA NAME='BOO'><CATEGORY_TYPE NAME='Open'><PROPOSED_LEVEL NAME='1'></PROPOSED_LEVEL></CATEGORY_TYPE><CATEGORY_TYPE NAME='NOC'><PROPOSED_LEVEL NAME='5'></PROPOSED_LEVEL></CATEGORY_TYPE></CATEGORY_AREA></CATEGORY_AREA_LIST></ROOT>"

然后在javascript函数中,我试图获取所有CATEGORY_AREA

var dp = new DOMParser();    
  var xmlDoc = dp.parseFromString(str , "text/xml");
    var list = xmlDoc.getElementsByTagName("CATEGORY_AREA_LIST");
    var categoryArea = list[0].childNodes;

但是categoryArea只有一个条目。

我做错什么了吗?

我的意图是访问所有category_area,然后访问所有category_type和proposal_level。

请帮助

1 个答案:

答案 0 :(得分:1)

如果将console.log(xmlDoc)添加到代码中,则可以查看DOM分析器生成的XML文档。

Screenshot of DOM in browser developer tools

它有很多错误,因此CATEGORY_AREA_LIST元素没有子节点。

您可以使用xmllint之类的工具(libxml附带的工具,因此可以在大多数UNIX系统(包括Windows 10上轻松安装))突出显示XML中的特定错误。


重新编辑:

现在您已经解决了XML问题,我无法重现该问题:

str = "<ROOT><CATEGORY_AREA_LIST><CATEGORY_AREA NAME='General'><CATEGORY_TYPE NAME='MOC'><PROPOSED_LEVEL NAME='3'></PROPOSED_LEVEL></CATEGORY_TYPE><CATEGORY_TYPE NAME='General'><PROPOSED_LEVEL NAME='3'></PROPOSED_LEVEL></CATEGORY_TYPE></CATEGORY_AREA><CATEGORY_AREA NAME='BOO'><CATEGORY_TYPE NAME='Open'><PROPOSED_LEVEL NAME='1'></PROPOSED_LEVEL></CATEGORY_TYPE><CATEGORY_TYPE NAME='NOC'><PROPOSED_LEVEL NAME='5'></PROPOSED_LEVEL></CATEGORY_TYPE></CATEGORY_AREA></CATEGORY_AREA_LIST></ROOT>"
var dp = new DOMParser();    
var xmlDoc = dp.parseFromString(str , "text/xml");
var list = xmlDoc.getElementsByTagName("CATEGORY_AREA_LIST");
var categoryArea = list[0].childNodes;
console.log(categoryArea.length)