2015-06-10 3 views
0

Мне нужно разобрать ниже xml в javascript.Анализ xml в Javascript итерации через дочерние узлы

<Department id='1' name='Admins'> 
    <Floor Id='5' Name='WingA'> 
     <Employee Id='35' Name='John Smith' SysId='120' FileId='135' /> 
     <Employee Id='124' Name='John Doe' SysId='214' FileId='125' /> 
     <Employee Id='79' Name='Lorem Ipsum' SysId='185' FileId='194' /> 
    </Floor> 
</Department> 

Что мне нужно перебрать всех сотрудников, пока я не встретил данное условие (например, получить FILEID узла сотрудника, где SYSID = 214). Я могу получить узел «Пол», но не уверен, как проходить через детей и соответствовать условию? В ChildNodes [0] .nodeValue не кажется, работает

parser = new DOMParser(); 
xmlDoc = parser.parseFromString(xmlstr, "text/xml"); 

floor = xmlDoc.getElementsByTagName("Floor"); 
     for (i = 0; i < floor.length; i++) { 
floor[i].childNodes[0].nodeValue 
} 

ответ

2

Попробуйте что-то вроде этого:

for (var i = 0; i < floor.length; i++) { 
    for (var j = 0; j < floor[i].childNodes.length; j++) { 
    var el = floor[i].childNodes[j]; 
    console.log(el.attributes[2].nodeValue); 
    } 
} 

Тест скрипки: https://jsfiddle.net/1r2ydxhu/

1

Там нет nodeValue на тегах работников .. Так что вы ожидали, что вас покажут?

попробовать более подходящим:

.hasAttribute("SysId") 
.getAttribute("SysId") 

и почему бы не выбрать по "Работника"? это только элемент первого этажа, который вы хотите проверить?

также consdier, что несколько типов childnode существует, если анализируется как HTML .. так

for (i = 0; i < floor.childNodes.length; i++) { 
    elm = floor.childNodes[i] 
    if(elm.nodeType == 1 && elm.hasAttribute("SysId")) 
     console.info(elm.getAttribute("SysId")) 
} 
Смежные вопросы