парсер xml на js
Помогите добить парсер xml на js новичку.
есть xml - Код:
<calendar> if (window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest(); } else { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET","nalog_calendar.xml",false); xmlhttp.send(); xmlDoc=xmlhttp.responseXML; тут как бы все понятно, что нужно в соответствии с месяцем и днем взять из дерева данные и вставить в дом..... но вот в том то и загвоздка, что как новичок не могу пройти по этому xml дереву - ни getElementsByTagName("month")[0].childNodes[0].nodeValue; ни getElementsByTagName("day")[3].getAttribute("15"); - ничего не идет.... просьба прежде чем ногами пинать, дать адекватный ответ. лучше с примером, чтобы не так обидно было :-) |
var xmlhttp = new XMLHttpRequest(); xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("GET", "nalog_calendar.xml", true); xmlhttp.onloadend = function() { var doc = document.createElement("div"); doc.innerHTML = this.responseText; console.log(doc.getElementsByTagName("day")[3].getAttribute("15")); }; xmlhttp.send(); |
нет...... так тоже ничего не дает.....
|
Vlad777, ой, забыл вторую строку стереть. Она не нужна.
Ну и важно понимать, что делает getAttribute('15'). |
Ruslan, 2 строка не работает, это и так было понятно, т.к. такую конструкцию обычно через if пишут, во-вторых, вы изменили синхрон.способ передачи данных на асинхронный, но на обход xml дерева это не как не сказывается. Мне нужна помощь в та ом, чтобы при определении месяца и даты текущего дня достучаться до значения в блоке cdata - соответствующее текущей даты. Обход по самому дереву рекурсией я сделал, но толку тоже мало..... так как выдергиваются все значения в cdata а мне нужно на текущую..... вот тут и застрял. Если кто может или знает как, помогите плиз.
|
Пример перебора
var responseText = '<calendar><title/><year index="2018"/><month name="january"/><day num="1" type="holiday"><![CDATA[ ]]></day><day num="2" type="holiday"><![CDATA[ ]]></day><day num="3" type="holiday"><![CDATA[ ]]></day><day num="4" type="holiday"><![CDATA[ ]]></day><day num="5" type="holiday"><![CDATA[ ]]></day><day num="6" type="plain"><![CDATA[ ]]></day><day num="7" type="plain"><![CDATA[ ]]></day><day num="8" type="holiday"><![CDATA[ ]]></day><day num="9" type="event"><![CDATA[<p >some data.....</p>]]></day></calendar>'; var parseXml; if (typeof window.DOMParser != "undefined") { parseXml = function(xmlStr) { return ( new window.DOMParser() ).parseFromString(xmlStr, "text/xml"); }; } else if (typeof window.ActiveXObject != "undefined" && new window.ActiveXObject("Microsoft.XMLDOM")) { parseXml = function(xmlStr) { var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async = "false"; xmlDoc.loadXML(xmlStr); return xmlDoc; }; } else { throw new Error("No XML parser found"); } var xml = parseXml(responseText); var dayList = xml.getElementsByTagName("day"); for (var i = 0; i < dayList.length; i++) { console.log(dayList[i].getAttribute("type")); } |
Dilettante_Pro, ActiveXObject из под браузера не получится, и только ишак поддерживает.
|
laimas,
Я смотрю в Хроме - и все работает. Обратите внимание на строки 5-8 |
Цитата:
|
laimas,
Цитата:
ActiveXObject используется по условию. Проверил - работает в Хроме, ИЕ, Опера |
Часовой пояс GMT +3, время: 00:30. |