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

Форум PHP

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

 

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

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

тема: xml-парсер
 
 автор: Денис   (27.10.2006 в 15:20)   письмо автору
 
 

Тема не нова, но нужного ответа так и не нашел. Подскажите, пожалуйста, ресурс, где можно было бы найти пример скриптов xml-парсера на РНР? Т.е. на вход подается xml-документ, его нужно разобрать и вывести содержимое. Заранее спасибо.

   
 
 автор: aurus   (27.10.2006 в 16:36)   письмо автору
 
   для: Денис   (27.10.2006 в 15:20)
 

я точных адресов не знаю,но я читал статьи на сайтах: addzone.ru, http://library.mnwhost.ru
Вообщем заходим на яндекс и запрашиваем: "PHP парсер XML" :-)

   
 
 автор: Саня   (27.10.2006 в 21:06)   письмо автору
 
   для: Денис   (27.10.2006 в 15:20)
 

http://softtime.ru/forum/srchform.php?name=xml - тут полно информации.

   
 
 автор: cheops   (27.10.2006 в 22:45)   письмо автору
 
   для: Денис   (27.10.2006 в 15:20)
 

В PHP имеются стандартные расширения для разбора XML-файлов, возможно вам будет интересна темы по ссылкам
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3408
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=4072

   
 
 автор: Денис   (30.10.2006 в 15:59)   письмо автору
 
   для: cheops   (27.10.2006 в 22:45)
 

Замечательно, спасибо. Вариант идеальный, но при работе с базой данных.
Можно ли применить один из данных методов для построения иерархии деревьев при разборе xml-файла? Пример такой:
1.xml

<item>
       <title>А</title>
</item>
<item>
       <title>Б</title>
                  <item>
                            <title>В</title>
                  </item>
</item>
<item>
       <title>Г</title>
</item>

необходимо построить дерево:
- А
- Б
---- В
- Г
------------------

   
 
 автор: cheops   (30.10.2006 в 16:10)   письмо автору
 
   для: Денис   (30.10.2006 в 15:59)
 

Да, конечно, обычно если степерь вложенности заранее не известна, то прибегают к рекурсивному спуску по массиву.

   
 
 автор: Денис   (30.10.2006 в 16:19)   письмо автору
 
   для: cheops   (30.10.2006 в 16:10)
 

Вы могли бы хотя бы набросками подсказать, как можно разобрать эти xml-теги? я думал, что нужно составить правильное рег. выражение, но пока что-то не выходит...

   
 
 автор: elenaki   (30.10.2006 в 16:23)   письмо автору
 
   для: Денис   (30.10.2006 в 16:19)
 

у вас все title на одном уровне (item). в XML уровни обозначаются тэгами, а не просто отступами.

   
 
 автор: Денис   (30.10.2006 в 16:31)   письмо автору
 
   для: elenaki   (30.10.2006 в 16:23)
 

Я просто хотел показать визуально, что есть некоторая вложенность. Эта вложенность заранее неизвестна.
Вот участок кода:

<item identifier="WELCOME" identifierref="res_welcome">
        <title>Welcome</title>
</item>

Такая конструкция может повторяться несколько раз, меняются только данные между тегами <title>.

   
 
 автор: violet   (30.10.2006 в 17:09)   письмо автору
 
   для: Денис   (30.10.2006 в 16:19)
 

Посмотри вот тут: http://ua2.php.net/manual/ru/function.xml-parse-into-struct.php

   
 
 автор: violet   (30.10.2006 в 17:13)   письмо автору
 
   для: violet   (30.10.2006 в 17:09)
 

Еще один красивый пример:

<?

function print_array($ar) {

 static 
$count;


 
$count = (isset($count)) ? ++$count 0;


 
$colors = array('#FFCB72''#FFB072''#FFE972''#F1FF72',

     
'#92FF69''#6EF6DA''#72D9FE');


 if (
$count count($colors)) {

 echo 
"Достигнута максимальная глубина погружения!";

 
$count--;

 return;

 }


 if (!
is_array($ar)) {

 echo 
"Passed argument is not an array!<p>";

 return; }


 echo 
"<table border=1 cellpadding=0 cellspacing=0 bgcolor=$colors[$count]>";

 while(list(
$k$v) = each($ar)) {

 echo 
"<tr><td>$k</td><td>$v</td></tr>\n";

 if (
is_array($v)) {

 echo 
"<tr><td> </td><td>";

 
print_array($v);

 echo 
"</td></tr>\n";

 }

 }

 echo 
"</table>";

 
$count--;

 }




 
$simple file_get_contents("test.xml");
 
$p xml_parser_create();
 
xml_parse_into_struct($p$simple$vals$index);
 
xml_parser_free($p);
 
print_array($vals);
?>

   
 
 автор: Денис   (30.10.2006 в 19:26)   письмо автору
 
   для: cheops   (30.10.2006 в 16:10)
 

Извините за настойчивость, но у меня еще один вопрос. Каким образом данные из xml-файла можно "загнать" в объект? Ведь с объектом потом можно будет проще работать, чем с массивом. Заранее спасибо.

   
 
 автор: Саня   (30.10.2006 в 20:19)   письмо автору
 
   для: Денис   (30.10.2006 в 19:26)
 

В таком случае советую воспользоваться расширением SimpleXML.

   
Rambler's Top100
вверх

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