Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: NODEJS разбор XML

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
3d_killer
Отправлено: 17 Января, 2015 - 16:15:49
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




есть скрипт на php:
PHP:
скопировать код в буфер обмена
  1.  
  2. $postdata = '<?xml version="1.0" encoding="utf-8"?><request><query>Запрос</query><groupings><groupby attr="d" mode="deep" groups-on-page="50" docs-in-group="1" /></groupings></request>';
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_URL, "http://xmlsearch.yandex.ru/xmlsearch?user=&lr=39&l10n=ru");
  5. curl_setopt($ch, CURLOPT_HEADER, 0);
  6. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  7. curl_setopt($ch, CURLOPT_POST, 1);
  8. curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
  9. curl_setopt($ch, CURLOPT_TIMEOUT, 20);
  10. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
  11. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  12. curl_setopt($ch, CURLOPT_ENCODING, "");
  13. $data = curl_exec($ch);
  14. curl_close($ch);
  15.  
  16. $pos = 0;
  17. $xml = simplexml_load_string($data);
  18. foreach ($xml->response->results->grouping->group as $urldata)
  19. {
  20.     $pos++;
  21.     $name = $urldata->doc->url;
  22.     $poss = strripos($name, 'site.ru');
  23.     if ($poss > 0) {
  24.         echo 'Позиция: '.$pos;
  25.         break;
  26.     }
  27. }
  28.  

С помощью яндекс xml я получаю результаты по запросу и получаю позицию сайта, как это можно переделать на nodejs ?
получить результаты у меня получилось но как разобрать полученный результат и найти позицию как то не могу
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var request = require('request');
  3. request(url_yandex+res_1,function (error, response, data) {
  4.   if (!error && response.statusCode == 200) {
  5.         console.log(data) // Show the HTML for the Google homepage.
  6.   }
  7. })
  8.  
 
My status
 Top
teddy
Отправлено: 17 Января, 2015 - 17:02:21
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




1. Заходишь на https://www[dot]npmjs[dot]com/
2. В поисковом инпуте вбиваешь xml parser
3. Ставишь подходящий через npm
4. Парсишь результат по докам модуля
 
 Top
3d_killer
Отправлено: 17 Января, 2015 - 17:24:43
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




teddy, так вот не пойму как перебирать результат, например выбрал:
https://www[dot]npmjs[dot]com/package/xml-parser , установил и дописал
CODE (javascript):
скопировать код в буфер обмена
  1. var obj = parse(data);
  2. console.log(inspect(obj, { domain: true, depth: Infinity }));

он мне выдает типо вар дампа, не пойму как эти данные использовать, документации особо не нашел
 
My status
 Top
teddy
Отправлено: 17 Января, 2015 - 18:25:15
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Ты же объект задампил, поэтому удивляться не нужно Улыбка
Эта строка вернула тебе объект var obj = parse(data); который сгенерирован на основе xml
А дальше делай с ним что хочешь

Если тебе не подходит этот модуль смотри другие, там их более 5000.
Есть с нормальными доками, есть с хреновыми.

Вот например модуль sax https://www[dot]npmjs[dot]com/package/sax
На мой взгляд удобнее чем тот который установил ты. И примеров больше.

Если тебе нужно получить текст узла, то можешь повесить обработчик на событие ontext.


CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var parser = require('sax').parser(true);
  3. var xml = '<root><phrase>Hello, world!</phrase><phrase><subphrase>Hello, all!</subphrase></phrase></root>';
  4.  
  5. parser.ontext = function(nodeValue){
  6.     console.log(nodeValue);
  7. };
  8.  
  9. parser.write(xml).close();
  10.  

(Отредактировано автором: 17 Января, 2015 - 18:25:45)

 
 Top
3d_killer
Отправлено: 17 Января, 2015 - 18:42:19
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




это почти то, только:
PHP:
скопировать код в буфер обмена
  1.  
  2. var fs = require('fs');
  3. var xml = fs.readFileSync('test/test.xml', 'utf8');
  4. var parser = require('sax').parser(true);
  5. parser.onattribute = function(url){
  6.     console.log(url);
  7. };
  8. parser.write(xml).close();
  9.  

как мне определить позицию и обратиться к значению value?
Прикреплено изображение (Нажмите для увеличения)
ZEVS_4d.jpg
 
My status
 Top
teddy
Отправлено: 17 Января, 2015 - 20:39:19
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




У меня нет представления о структуре XML который ты парсишь и на основе каких данных вообще должен происходить парсинг. Набор атрибутов с непонятным значениями ни о чем не говорит

(Отредактировано автором: 17 Января, 2015 - 20:39:45)

 
 Top
3d_killer
Отправлено: 17 Января, 2015 - 20:42:42
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




dd
Скачать файл: test.xml
Скачан раз: 69
 
My status
 Top
3d_killer
Отправлено: 17 Января, 2015 - 20:43:06
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




не вкладывается
(Добавление)
https://yadi.sk/d/ordmcthje49xU
Скачать файл: test.xml
Скачан раз: 64
 
My status
 Top
teddy
Отправлено: 17 Января, 2015 - 21:32:31
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Мда... XML здоровенный. В связи с этим, предлагаю воспользоваться xPath для того что бы "не ходить" по тем узлам, которые нам не нужны.

Поставь xpath и xmldom и попробуй следующий код:
и не говори что не вышло, я распарсил ;)

CODE (javascript):
скопировать код в буфер обмена
  1. var fs    = require('fs');
  2. var xml = fs.readFileSync('./test.xml', 'utf-8');
  3.  
  4. var xpath = require('xpath'), dom = require('xmldom').DOMParser
  5. var doc = new dom().parseFromString(xml)
  6. var xmlSites = xpath.select('//url', doc);
  7.  
  8. var position = 1;
  9.  
  10. xmlSites.every(function(obj){
  11.        
  12.     var sitename = obj.lastChild.nodeValue.trim();
  13.        
  14.     if(sitename.indexOf('tracker') > 0){
  15.         console.log(sitename, position);
  16.         return false;
  17.     }
  18.        
  19.     position++;
  20.     return true;
  21.        
  22. });
  23.  

Только путь до xml укажи правильный и в indexof запихни тот сайт который нужен

(Отредактировано автором: 17 Января, 2015 - 21:33:22)

 
 Top
3d_killer
Отправлено: 17 Января, 2015 - 21:36:20
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




ага работает, спасибо большое Улыбка
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB