powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / [AJAX] Кто какие библиотеки для JS парсинга XML использует?
8 сообщений из 8, страница 1 из 1
[AJAX] Кто какие библиотеки для JS парсинга XML использует?
    #34028452
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочется, чтобы была совместимой с MOzilla, Opera и IE.

Задача - послать XMLHttpRequest, получить response в виде XML
и вытащить из него данные в JS объекты, ну и применить их соответственно по назначению.

Посоветуйте, как парсить XML?

Можно, конечно, просто подгружать куски html, но это не есть гуд, и не поможет, когда нужно вернуть на клиентка какую -нибудь осмысленную структурку и обработать.
...
Рейтинг: 0 / 0
[AJAX] Кто какие библиотеки для JS парсинга XML использует?
    #34029578
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем DOM плох? Пишете крос браузерный билдер:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
function buildDocument(xmlText){
  var retval;
   try {
    var domParser= new  DOMParser();
    retval=domParser.parseFromString(xmlText,"text/xml");
     if (retval.documentElement.tagName=="parsererror"){
      var reError=/>([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column(\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/;
      reError.test(retval.xml);
      alert("An error occurred:\r\nDescription: "+RegExp.$ 1 +"\r\nFile: "+RegExp.$ 2 +"\r\nLine: "+RegExp.$ 3 +"\r\nLine Pos: "+RegExp.$ 4 +"\r\nSource: "+RegExp.$ 5 );
      retval= null ;
    }
     return  retval;
  }  catch (e2) {
    retval= null ;
  }
  var aMSSignatures=["MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","Microsoft.XmlDom"];
   for (var i= 0 ;i<aMSSignatures.length;i++){
     try {
      retval= new  ActiveXObject(aMSSignatures[i]);
      retval.async=false;
      retval.loadXML(xmlText);
       if (retval.parseError!= 0 ) {
        var oError=retval.parseError;
        alert("An error occurred:\nError Code: "+oError.errorCode +"\r\nLine: "+oError.line+ "\r\nLine Pos: "+oError.linepos+"\r\nReason: "+oError.reason);
        retval= null ;
      }
    }  catch (e) {
      retval= null ;
    }
     if (retval)  return  retval;
  }
   return  retval;
}

(заметьте, для MS берется версия не позднее 3.0 - в более поздних проблемы с xPath)

и работаете с DOM. Мне в 99% случаев хватает двух слежующих функций:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
function selectFirstNode(node,xPath){
  var retval;
   try { retval=node.selectSingleNode(xPath); }
   catch (e){
    var list=selectNodes(node,xPath);
     if (list && list.length> 0 ) retval=list[ 0 ];
     else  retval= null ;
  }
   return  retval;
}
function selectNodes(node,xPath){
  var retval;
   try {
    retval=node.selectNodes(xPath);
  }  catch (e) {
     try {
      var xpe= new  XPathEvaluator();
      var nsResolver=xpe.createNSResolver(node.ownerDocument== null  ? node.documentElement : node.ownerDocument.documentElement);
      var eResult=xpe.evaluate(xPath,node,nsResolver, 0 , null );
      retval=[];
      var eResultItem;
       while (eResultItem=eResult.iterateNext()) retval.push(eResultItem);
    }  catch (e2) {
      retval= null ;
    }
  }
   return  retval;
}
...
Рейтинг: 0 / 0
[AJAX] Кто какие библиотеки для JS парсинга XML использует?
    #34029585
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, все-таки забыл еще пару функций, которые вместе с вышеприведенными кроют 99% потребностей:

Код: plaintext
1.
2.
3.
4.
5.
6.
function getNodeText(node){
   if (node && node.firstChild)  return  node.firstChild.nodeValue;
   return  "";
}
function getChildNodeText(node,childName){
   return  getNodeText(selectFirstNode(node,childName));
}
...
Рейтинг: 0 / 0
[AJAX] Кто какие библиотеки для JS парсинга XML использует?
    #34029602
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, все-таки еще не проснулся после обеда. Вышеприведенные 4 функции ВМЕСТЕ со стандартными функциями манипулирования DOM кроют 99% потребностей моих программ на JavaScript по разборке XML.
...
Рейтинг: 0 / 0
[AJAX] Кто какие библиотеки для JS парсинга XML использует?
    #34030420
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в опере данная конструкция работать будет? Вы не могли бы привести пример(ссылку) использования написанных здесь функций?
...
Рейтинг: 0 / 0
[AJAX] Кто какие библиотеки для JS парсинга XML использует?
    #34030577
Фотография fleh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модераторам: не переносите, пожалуйста, это сообщение никуда. потом искать проще :)
...
Рейтинг: 0 / 0
[AJAX] Кто какие библиотеки для JS парсинга XML использует?
    #34031135
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите еще пожалуйста, где можно посмотреть DOM API (как JAXP API в java). Приходится тыкаться наугад и натыкаться на такие весчи, как:

node.getFirstChild()!=node.firstChild
...
Рейтинг: 0 / 0
[AJAX] Кто какие библиотеки для JS парсинга XML использует?
    #34031566
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TurnА в опере данная конструкция работать будет? Вы не могли бы привести пример(ссылку) использования написанных здесь функций?

А в Опере не будет - да мне и не надо. Опера не поддерживает xPath. Это не означает, однако, что нельзя разобрать дерево методами DOM - просто будет долго и нудно.

Про DOM все написано в

http://www.w3.org/DOM/
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / [AJAX] Кто какие библиотеки для JS парсинга XML использует?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]