getElementsByTagName не возвращает все дочерние узлы - PullRequest
0 голосов
/ 28 сентября 2018

Моя строка 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 есть только одна запись.

Я что-то не так делаю?

Мое намерение - получить доступ ко всем категориям категорий, а затем ко всем типам категорий и предполагаемых уровней.

Пожалуйста, помогите

1 Ответ

0 голосов
/ 28 сентября 2018

Если вы добавите console.log(xmlDoc) к своему коду, вы можете просмотреть XML-документ, сгенерированный анализатором DOM.

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)
...