Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.03.2018, 12:58
Аспирант
Отправить личное сообщение для Vlad777 Посмотреть профиль Найти все сообщения от Vlad777
 
Регистрация: 01.03.2018
Сообщений: 37

парсер xml на js
Помогите добить парсер xml на js новичку.
есть xml -
Код:
<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>
есть парсер -
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"); - ничего не идет.... просьба прежде чем ногами пинать, дать адекватный ответ. лучше с примером, чтобы не так обидно было :-)
Ответить с цитированием
  #2 (permalink)  
Старый 01.03.2018, 13:22
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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();
Ответить с цитированием
  #3 (permalink)  
Старый 01.03.2018, 13:29
Аспирант
Отправить личное сообщение для Vlad777 Посмотреть профиль Найти все сообщения от Vlad777
 
Регистрация: 01.03.2018
Сообщений: 37

нет...... так тоже ничего не дает.....
Ответить с цитированием
  #4 (permalink)  
Старый 01.03.2018, 22:05
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Vlad777, ой, забыл вторую строку стереть. Она не нужна.
Ну и важно понимать, что делает getAttribute('15').
Ответить с цитированием
  #5 (permalink)  
Старый 02.03.2018, 10:30
Аспирант
Отправить личное сообщение для Vlad777 Посмотреть профиль Найти все сообщения от Vlad777
 
Регистрация: 01.03.2018
Сообщений: 37

Ruslan, 2 строка не работает, это и так было понятно, т.к. такую конструкцию обычно через if пишут, во-вторых, вы изменили синхрон.способ передачи данных на асинхронный, но на обход xml дерева это не как не сказывается. Мне нужна помощь в та ом, чтобы при определении месяца и даты текущего дня достучаться до значения в блоке cdata - соответствующее текущей даты. Обход по самому дереву рекурсией я сделал, но толку тоже мало..... так как выдергиваются все значения в cdata а мне нужно на текущую..... вот тут и застрял. Если кто может или знает как, помогите плиз.
Ответить с цитированием
  #6 (permalink)  
Старый 02.03.2018, 11:31
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Пример перебора
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, 02.03.2018 в 15:31.
Ответить с цитированием
  #7 (permalink)  
Старый 02.03.2018, 11:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Dilettante_Pro, ActiveXObject из под браузера не получится, и только ишак поддерживает.
Ответить с цитированием
  #8 (permalink)  
Старый 02.03.2018, 14:33
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

laimas,
Я смотрю в Хроме - и все работает.
Обратите внимание на строки 5-8
Ответить с цитированием
  #9 (permalink)  
Старый 02.03.2018, 14:45
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Dilettante_Pro
Обратите внимание на строки 5-8
А я ActiveXObject.
Ответить с цитированием
  #10 (permalink)  
Старый 02.03.2018, 15:08
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

laimas,
Сообщение от laimas
А я ActiveXObject.
Что-то я вас не понимаю...
ActiveXObject используется по условию.
Проверил - работает в Хроме, ИЕ, Опера

Последний раз редактировалось Dilettante_Pro, 02.03.2018 в 15:26.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод xml дерева на js kdes70 Events/DOM/Window 3 18.02.2015 08:31
Поиск js в XML ami_moor Общие вопросы Javascript 0 09.06.2014 11:40
Парсер css на js bio Общие вопросы Javascript 3 19.05.2014 13:18
XML на сервер посредством js Hron AJAX и COMET 10 26.12.2010 01:43
Что выбрать XML или JSON для передачи Ajax - ом из PHP в JS Gozar Общие вопросы Javascript 20 16.08.2009 23:36