Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как разобрать XML или RSS файл в базу?
 
 автор: AN   (23.07.2008 в 12:49)   письмо автору
 
 

Подскажите где можно почитать инфу с примерами парсера по разбору XML и RSS файлов туда и обратно? Необходимо для работы с товарами и новостями с е-магазинами.
Спасибо.

   
 
 автор: AN   (24.07.2008 в 03:39)   письмо автору
 
   для: AN   (23.07.2008 в 12:49)
 

посоветуйте какой парсер? где почитать чтобы заново не изобретать велосипед?

   
 
 автор: mihdan   (24.07.2008 в 11:10)   письмо автору
 
   для: AN   (24.07.2008 в 03:39)
 

>посоветуйте какой парсер? где почитать чтобы заново не изобретать велосипед?
на форуме есть поиск

один

два

   
 
 автор: AN   (18.10.2008 в 19:50)   письмо автору
 
   для: mihdan   (24.07.2008 в 11:10)
 

смотрел смотрел, все как то раздроблено, а где бы посмотреть толковый скрипт?

   
 
 автор: coloboc66   (19.10.2008 в 00:23)   письмо автору
 
   для: AN   (18.10.2008 в 19:50)
 

Да нигде - их здесь просто нет. И вообще нигде нет. Беритесь сами за документацию и пишите.

   
 
 автор: Trianon   (19.10.2008 в 13:52)   письмо автору
 
   для: coloboc66   (19.10.2008 в 00:23)
 

Мой чем не устраивает?

   
 
 автор: coloboc66   (20.10.2008 в 20:42)   письмо автору
 
   для: Trianon   (19.10.2008 в 13:52)
 

Ммм... А где он?

   
 
 автор: Trianon   (20.10.2008 в 21:11)   письмо автору
 
   для: coloboc66   (20.10.2008 в 20:42)
 

http://softtime.ru/forum/read.php?id_forum=1&id_theme=53762
и далее по ссылкам.

   
 
 автор: coloboc66   (21.10.2008 в 09:22)   письмо автору
 
   для: Trianon   (20.10.2008 в 21:11)
 

Мда... Это я отвечал на сообщение, а в голове у меня был не парсер, а PHP DOM. Если под парсером понимать вывод содержимого XML на страницу, то это не особо сложная задача. А вот что действительно интересует, так это редактирование XML с помощью PHP DOM.

   
 
 автор: Расшифровка   (21.10.2008 в 10:06)   письмо автору
 
   для: coloboc66   (21.10.2008 в 09:22)
 

кстати из всех расширений это DOM наиболее толковое ,
у него есть практически все для работы


правда такая запись нужна для создания элемента,
что не радует
$channel_parent = $dom->appendChild($dom->createElement("channel"));

   
 
 автор: coloboc66   (21.10.2008 в 10:35)   письмо автору
 
   для: Расшифровка   (21.10.2008 в 10:06)
 

Ну а дольше как? Как в этот узел записать атрибуты и содержимое?

   
 
 автор: Расшифровка   (21.10.2008 в 17:48)   письмо автору
 
   для: coloboc66   (21.10.2008 в 10:35)
 

//создаем xml, в нужной кодировке
$dom = new DOMDocument('1.0', 'UTF-8');

//добавляем родительский элемент, корень
$channel_parent = $dom->appendChild($dom->createElement("channel"));
 
//добавляем дочерний узел, внуть channel
$newitem = $channel_parent->appendChild($dom->createElement("item"));

//добавляем 1 элемент внутрь item, с текстом
$element = $dom->createElement("item_any_element" , "текст который будет содержать");
$newitem->appendChild($element);

//добавляем 2ой элемент внутрь item  , с текстом
$element = $dom->createElement("item_any_element2" , "еще текст который будет содержать");
$newitem->appendChild($element);

echo $dom->saveXML() . "\n";


образец
http://news.google.com/news?rls=en&q=php&sourceid=opera&ie=UTF-8&oe=utf-8&um=1&tab=wn&nolr=1&output=rss

п.с. а как можно красиво код оформить? чернобелое плохо читать

   
 
 автор: coloboc66   (21.10.2008 в 20:23)   письмо автору
 
   для: Расшифровка   (21.10.2008 в 17:48)
 

А расширения какие-то должны быть на сервере установлены?

   
 
 автор: Расшифровка   (21.10.2008 в 22:24)   письмо автору
 
   для: coloboc66   (21.10.2008 в 20:23)
 

coloboc66, хорош прикалываться)),

There is no installation needed to use these functions; they are part of the PHP core.


http://us.php.net/manual/en/dom.installation.php

из всех расширений по работе с xml, dom наиболее удобное,
на simlexml забил, тупит с кодировками,

   
 
 автор: coloboc66   (22.10.2008 в 09:40)   письмо автору
 
   для: Расшифровка   (21.10.2008 в 17:48)
 

А значения атрибутов узлов как устанавливать? В этом примере, если я правильно понял, атрибуты не устанавливаются.

   
 
 автор: Расшифровка   (22.10.2008 в 12:59)   письмо автору
 
   для: coloboc66   (22.10.2008 в 09:40)
 

ну я в кратце

можно и атрибуты

$doc = new DOMDocument("1.0");
$node = $doc->createElement("para");
$newnode = $doc->appendChild($node);
$newnode->setAttribute("align", "left");



а вообще мануал и примеры есть, там не плохо расписано

http://us.php.net/manual/en/book.dom.php

   
 
 автор: Расшифровка   (21.10.2008 в 01:00)   письмо автору
 
   для: AN   (23.07.2008 в 12:49)
 

тенденции и обзор проблемы,

http://phpclub.ru/faq/PHP5/XML
+php.net

да и не забудьте выбросить свалку истории кодировку win1251,
это уже рудимент,

utf-8 рулит,

   
 
 автор: GeorgeIV   (22.10.2008 в 10:04)   письмо автору
 
   для: Расшифровка   (21.10.2008 в 01:00)
 

Развыбрасывался... В мире не только апач с пхп существуют...

   
 
 автор: coloboc66   (22.10.2008 в 10:28)   письмо автору
 
   для: GeorgeIV   (22.10.2008 в 10:04)
 

Да правильно - выбросить надо. Я раньше всё делал в вин1251, а потом на сайте понадобились другие языки и возникла проблема - нужно теперь всё переделывать. Если бы изначально всё делал в УТФ-8, этой проблемы бы не возникло...

   
 
 автор: Расшифровка   (22.10.2008 в 13:04)   письмо автору
 
   для: GeorgeIV   (22.10.2008 в 10:04)
 

ну эт в разрезе php форума))

   
 
 автор: coloboc66   (22.10.2008 в 15:26)   письмо автору
 
   для: Расшифровка   (22.10.2008 в 13:04)
 

Фиг его знает - я даже не могу файл прочитать, у меня выдаётся ошибка с первой же строки кода:
$dom->load('file.xml');

Notice: Undefined variable: dom in z:\home\localhost\www\testdir\xml\dom_readxml.php5 on line 3

Fatal error: Call to a member function load() on a non-object in z:\home\localhost\www\testdir\xml\dom_readxml.php5 on line 3

   
 
 автор: Расшифровка   (22.10.2008 в 15:43)   письмо автору
 
   для: coloboc66   (22.10.2008 в 15:26)
 

а так

$doc = new DOMDocument();
$doc->load('file.xml');
echo $doc->saveXML();

   
 
 автор: coloboc66   (22.10.2008 в 17:29)   письмо автору
 
   для: Расшифровка   (22.10.2008 в 15:43)
 

Так получается, но вопрос вот в чём: аши примеры выше по добавлению узла касаются добавления в НОВЫЙ документ? Интересует как-раз добавление узла в уже существующий документ, то есть его (документа) редактирование.

   
 
 автор: Расшифровка   (23.10.2008 в 01:40)   письмо автору
 
   для: Расшифровка   (22.10.2008 в 15:43)
 

без проблем редактируется все что угодно,

вместо
$dom = new DomDocument('1.0','iso-8859-15');
пишется $dom = new DomDocument();


еще методика
$dom = new DomDocument('1.0','iso-8859-15');

$ht_ml = $dom->appendChild($dom->createElement('html'));

$he_ad = $ht_ml->appendChild($dom->createElement('head'));

$tit_le= $he_ad->appendChild($dom->createElement('title'));
$tit_le->appendChild($dom->createTextNode('DOMAttr test'));

$me_ta = $he_ad->appendChild(new DOMElement('meta'));
$me_ta->setAttributeNode(new DOMAttr('name', 'Description'));
$me_ta->setAttributeNode(new DOMAttr('content', 'example'));

$me_ta = $he_ad->appendChild(new DOMElement('meta'));
$me_ta->setAttributeNode(new DOMAttr('name', 'Author'));
$me_ta->setAttributeNode(new DOMAttr('content', 'karvjorm'));

Result:

<?xml version="1.0" encoding="iso-8859-15"?>
<html>
  <head>
    <title>DOMAttr test</title>
    <meta name="Description" content="example"/>
    <meta name="Author" content="karvjorm"/>
  </head>

   
 
 автор: AN   (23.10.2008 в 21:35)   письмо автору
 
   для: Расшифровка   (23.10.2008 в 01:40)
 

ну вот есть живой пример:

<price date="2008-04-27 15:15">
<name>Site</name> 
<region>Украина</region> 
<url>http://site.com</url> 
<currency code="USD" rate="5.1" main="1" /> 

<catalog>
<category id="13">Камеры</category> 
<category id="14">Компьютеры</category> 
<category id="12">Tel-TV-DVD</category> 
<category id="4">Аудио</category> 
...
</catalog>

<items>
<item id="4918">
<name>SENNHEISER HD 515 Gaming</name> 
<url>http://site.com/audio/headphones/sennheiser/sennheiser_hd_515_gaming</url> 
<price>133.00</price> 
<categoryId>34</categoryId> 
<image>http://site.com/files/15/HD_515_m.jpg</image> 
</item>

<item id="4917">
<name>SENNHEISER HD 25-1 II</name> 
<url>http://site.com/audio/headphones/sennheiser/sennheiser_25-1_ii</url> 
<price>355.00</price> 
<categoryId>34</categoryId> 
<image>http://site.com/files/15/HD-25-1 II.jpg</image> 
</item>


вот я и думаю как грамотнее сделать...
при чем на лету нужно менять ID категории этого файла на ID категории в БД, ну и закидывать в базу ...

скажите, чето подобное толковое никто не встречал?

   
 
 автор: coloboc66   (27.10.2008 в 10:45)   письмо автору
 
   для: Расшифровка   (23.10.2008 в 01:40)
 

Не пойму, как получить нумерованный доступ к узлам в списке:
$doc = new DOMDocument();
$doc->load('file.xml');
$dataset = $doc->getElementsByTagName( "msg" );
$count_msgs=$dataset->length;

Вот это не работает:
for ($i =$first_msg; $i>=$last_msg; $i--)
{
echo '<hr/>';
echo $dataset[$i]->getAttribute('author');
}

Хотя так работает:
foreach( $dataset as $row ) 

echo $row->getAttribute('author');
}

Но мне нужен именно нумерованный вывод.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования