#1 25.02.09 11:02
[PHP+XML] Как разобрать\собрать XML?
Народ посдскажите:
1. как на PHP выделить из XML нужные мне элементы в переменные.
2. как из переменных собрать XML документ нужного мне вида.
допустим есть вот такой документ
<?xml version="1.0" encoding="UTF-8" ?>
<DataBase name="Customers">
<Metadata>
<fields>
<number>4</number>
<field name="id" type="1" />
<field name="name" type="2" length="10" />
<field name="address" type="2" length="25" />
<field name="phone" type="2" length="10" />
</fields>
<statistics>
<statistic name="Records" value="5" />
</statistics>
</Metadata>
<data>
<record id="1" name="Testing1" address="Testing1 Address" phone="testing1 phone" />
<record id="2" name="Testing2" address="Testing2 Address" phone="testing2 phone" />
<record id="3" name="Testing3" address="Testing3 Address" phone="testing3 phone" />
<record id="4" name="Testing4" address="Testing4 Address" phone="testing4 phone" />
<record id="5" name="Testing5" address="Testing5 Address" phone="testing5 phone" />
</data>
</DataBase>
Мне нужно его разобрать поработать с переменными и опять собрать и сохранить в БД в виде текстовой строки, чтобы при следующем обрашении сделать всё тоже самое.
Offline
#4 25.02.09 12:10
Re: [PHP+XML] Как разобрать\собрать XML?
Offline
#5 26.02.09 23:38
Re: [PHP+XML] Как разобрать\собрать XML?
Vega написал(а):
Может есть код с примерчиком
ну вот пример :)
файл:
Код: xml:
<?xml version="1.0" encoding="UTF-8"?> <settings> <setting name="address" value="Адрес" type="text" /> <setting name="phone" value="Телефон" type="text" /> <setting name="email" value="e-mail" type="text" /> <setting name="website" value="Сайт" type="text" /> <setting name="artdirector" value="Артдиректор" type="text" /> <setting name="capacity" value="Вместимость" type="text" /> <setting name="sound" value="Звук" type="text" /> <setting name="kitchen" value="Кухня" type="textarea" /> <setting name="barprice" value="Цены в баре" type="textarea" /> <setting name="enterprice" value="Цены на вход" type="textarea" /> </settings>
метод класса, который может выдрать данные из этого файла:
Код: php:
class xml_parser { public function parse_xml_attrs($xml_file_path) { $xml_file = simplexml_load_file($xml_file_path); $i=0; foreach ($xml_file as $item_name => $item_xml_data) { foreach ($item_xml_data->attributes() as $attr_name => $attr_data) { $attr_arr[$i][(string) $attr_name] = (string) $attr_data; } $i++; } return $attr_arr; } }
а вообще работа с xml неплохо описана в "Дмитрий Котеров, Алексей Костарев - php 5"
Offline
#6 26.03.09 12:24
Re: [PHP+XML] Как разобрать\собрать XML?
Очень сильно интересует, работа c XML по средствам DOM
В инете есть интересная статейка.
Выдаёт ошибку
Fatal error: Call to undefined function xmldoc() in ..\testDOM.php on line 9
Я наверное через строчку читаю, не могу понять где и как вообще определить эту функцию.
ссылка на источник: http://www.providerz.ru/articles/php/xm … intro.html
файл XML:
Код: xml:
<?xml version="1.0"?> <newsLine> <news date="1.1.2002"> <title>title 1</title> <text>news text 1</text> </news> <news date="5.1.2002"> <title>title 2</title> <text>news text 2</text> </news> <news date="10.1.2002"> <title>title 3</title> <text>news text 3</text> </news> </newsLine>
Код: php:
<?php $news = array(); $xml = join('',file('news.xml')); $xml = xmldoc($xml); // А теперь, вместо того, чтобы добираться до необходимых данных // "вручную" мы воспользуемся XPath. // Инициализируем $xml->xpath_init(); // Создаем новый контекст $ctx = xpath_new_context($xml); // Вычисляем XPath-выражение, результатом которого являются все node <news> $nodes = xpath_eval($ctx,'//news'); // Теперь нам остается только обработать полученные nodes. foreach($nodes->nodeset as $node) { // Сама обработка осталась такой же, правда за ненадобностью исчезла // проверка имени обрабатываемой node. $currentNews = array(); $currentNews['date'] = $node->get_attribute('date'); $content = $node->children(); foreach($content as $contentNode) { if (($contentNode->type==XML_ELEMENT_NODE) && (in_array($contentNode->name,array('title','text')))) $currentNews[$contentNode->name] = $contentNode->content; }; $news[] = $currentNews; }; ?>
Исправлено **KiSh** (26.03.09 12:27)
Offline
#9 26.03.09 13:48
Re: [PHP+XML] Как разобрать\собрать XML?
Походу рыть надо в сторону библиотек, но скача последний дистриб php5 я не обнаружил, там ничего похожего на php_dom.dll
Забыл указать юзаю вот этот дистриб:
Denwer3_Base_2008-01-13_a2.2.4_p5.2.4_m5.0.45_pma2.6.1.exe
Код::
Содержимое папки C:\WebServers\usr\local\php5\ext
26.03.2009 13:42 <DIR> .
26.03.2009 13:42 <DIR> ..
26.03.2009 13:42 0 1.txt
26.03.2009 13:34 8 810 php_domxml.dll
30.08.2007 09:11 950 329 php_gd2.dll
30.08.2007 09:11 49 211 php_mysql.dll
30.08.2007 09:11 86 076 php_mysqli.dll
30.08.2007 09:11 86 073 php_pdo.dll
30.08.2007 09:11 28 735 php_pdo_mysql.dll
25.02.2009 15:54 73 808 php_xmlrpc.dll
25.02.2009 15:54 221 261 php_xsl.dll
9 файлов 1 504 303 байт
2 папок 16 455 499 776 байт свободноphp.ini
Код::
;extension=php_bz2.dll extension=php_gd2.dll extension=php_xmlrpc.dll extension=php_mysql.dll extension=php_mysqli.dll extension=php_pdo.dll extension=php_pdo_mysql.dll extension=php_xsl.dll ;extension=php_domxml.dll
причём библиотечку php_domxml.dll я нашёл и скачал и когда её подключаю, при перезапуске окошки алертов ругаються, что эта библиотечка ваще не для виндовса.
В чём же проблема ёпта..
Offline

