Официальный сайт студ.городка НГТУ
Программирование и БД » [PHP+XML] Как разобрать\собрать XML? 

#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

#2  25.02.09 11:20

Re: [PHP+XML] Как разобрать\собрать XML?

SimpleXML

Offline

#3  25.02.09 11:59

Re: [PHP+XML] Как разобрать\собрать XML?

А попдробнее можно? Может есть код с примерчиком или ссыль? буду очень признателен.

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

#7  26.03.09 12:29

Re: [PHP+XML] Как разобрать\собрать XML?

**KiSh**, пых какой? в 5ом кажеца нада вместо xmldoc() юзать DomDocument(), но не уверен

Offline

#8  26.03.09 12:32

Re: [PHP+XML] Как разобрать\собрать XML?

PHP Version 5.2.4

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

#10  26.03.09 15:15

Re: [PHP+XML] Как разобрать\собрать XML?

в виндовсе вестимо

Offline

#11  26.03.09 16:34

Re: [PHP+XML] Как разобрать\собрать XML?

Хорошо! забил на метод DOM использовал simplexml

По средствам simplexml возможно редактировать xml?
или опять же надо конвертировать в DOM?

Offline

#12  27.03.09 03:25

Re: [PHP+XML] Как разобрать\собрать XML?

**KiSh** написал(а):

;extension=php_domxml.dll

вот эта строка тебе ни о чем не говорит?
возьми норм версию пхп со всеми экстеншенами и поставь вместо резанной версии денвера...
похпешники, млин

Offline

#13  27.03.09 03:29

Re: [PHP+XML] Как разобрать\собрать XML?

Вот имеено эту строку добавил, я. А затем и отключил библиотечку, была битая вроде.
Обновил пых, скачал новую библиотечку, подключил и всё равно андефайндид функшион xmldoc();

Offline

#14  27.03.09 03:31

Re: [PHP+XML] Как разобрать\собрать XML?

XuMiX, да ты тут несомнено прав, надо было мне имеено с этого начинать. Поставить отдельно пхп, мускул, и апатч. А я же для скорости поставил денвер и был доволен, пока не столкнулся с проблемкой.

Offline

#15  27.03.09 10:05

Re: [PHP+XML] Как разобрать\собрать XML?

а попробуй xampp поставь, там кажеца куча всяких расширений идёт сразу, только нада будет раскаменчивать успевать

Offline

#16  30.03.09 11:40

Re: [PHP+XML] Как разобрать\собрать XML?

а ещё проще поставить LAMP, тогда вообще всё просто

Offline

Программирование и БД » [PHP+XML] Как разобрать\собрать XML? 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.121 сек.
Выполнено 14 запросов.