Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Как добавить элемент в XML через DOM используя PHP? (https://javascript.ru/forum/server/11135-kak-dobavit-ehlement-v-xml-cherez-dom-ispolzuya-php.html)

bayah 09.08.2010 10:45

Как добавить элемент в XML через DOM используя PHP?
 
Собственно вопрос.
Есть такой xml файл:
Код:

<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="xmltest.css"?>
<root>
        <message number='1' date='05-08-2010' time='11:20' nick='bayah'>
                Message1
        </message>
        <message number='2' date='06-08-2010' time='00:00' nick='zend'>
                Message2
        </message>
</root>

Как видите, это нечто вроде сообщений на форуме.
Мне необходимо через php добавить новый элемент message, например.
Я работаю через php5, там функции, наконец-то, стали соответствовать стандарту. То есть теперь работа с DOM с помощью PHP проходит так же как в javascript, верно? Я имею ввиду называния методов и т.п.
Вот и тут мало примеров у меня. В нэте в основном статьи про методы прошлых версий работы с DOM.

Собственно, помогите разобраться как добавить этот элемент. Если можно примером.

Gvozd 09.08.2010 11:25

Цитата:

Сообщение от bayah
Я работаю через php5, там функции, наконец-то, стали соответствовать стандарту.

у меня лежит на компе справка к PHP4, и там есть раздел про DOM, и все там нормально
Цитата:

Сообщение от bayah
То есть теперь работа с DOM с помощью PHP проходит так же как в javascript, верно?

что за глупость?
в JS по-моему до сих пор ни в одном из браузеров полностью DOM не реализован.
я не читал оригинальный стандарт DOM, но похоже что в PHP он щаз полностью реализован, и при чем уже давно.
и несмотря на более полную поддержку DOM в PHP, нежели в JS, в PHP нельзя с ним работать так же как в JS, например из-за того же innerHTML, не входящего в стандарт.

По вашей же задаче:
в чем проблема?
это элементарное действие.
покажите код, который вы пробовали.
или вам с нуля за вас написать код?

bayah 09.08.2010 13:44

Код:

<?php
    $dom = new DOMDocument();
    $dom->load('xmlexample.xml');

    $newel = $dom->createElement('message');
    $newel->number=3;
    $root = $dom->getElementsByTagName('root');
    $root->appendChild($newel);
?>

Я делал вот так.
Получаю сообщение.
Fatal error: Call to undefined method DOMNodeList::appendChild() in Z:\home\rubbish\www\parcer\parcer.php on line 20
Не пойму почему метод не находится. Может я неверно обращаюсь с ним как-то?

Gvozd 09.08.2010 13:59

Цитата:

Сообщение от bayah
Call to undefined method DOMNodeList::appendChild()

в этом все сказано.
и та же бы ошибка у вас бы возникла в JS в аналогичной ситуации.
а все потому что, метод getElementsByTagName возвращает не один элемент(DOMNode), а множество элементов(DOMNodeList)
и метод appendChild может быть только у одного элемента(DOMNode), но не у списка элементов(DOMNodeList).
ТОлько, еслит в JS вы получали доступ к оперделенному элементу из списка, то вы пользовались индексом, то в PHP надо использовать метод item

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

вторая же заключается в том, что к главному элементу документа доступ следует осуществлять через свойство documentElement
это вам тут не DOM for HTML в исполнении JS

ЗЫ не говоря уже о вашем неправильном доступе к атрибутам, и прочим.
весьма весело слышать от вас причитания о несоблюдении стандартов DOM-а в языке PHP, когда вы сами используете совсем не DOM_овскую спецификацию

bayah 10.08.2010 17:06

Спасибо, буду внимательней.
Я причитаю только из факта реализации разных вариантов функций работы с DOM. Функции одной реализации нельзя использовать совместно с функциями другой, да и работают они по разному. Когда начинаю только изучать как это работает глаза разбегаются что куда. Но наконец нашел информацию.
Дмитрий Котеров, Алексей Костарев - "PHP5 в подлиннике", (Наиболее полное руководство по PHP5, примеры на PHP5, XML, ООП.)
Вроде бы толковая книжка.
Теперь разберусь.

Gvozd 10.08.2010 23:43

Цитата:

Сообщение от bayah
Но наконец нашел информацию.
Дмитрий Котеров, Алексей Костарев - "PHP5 в подлиннике"

книга по отзывам, конечно хорошая.
НО!
чем вам не угодил официальный мануал?!
в нем описаны ВСЕ функции PHP

inGray 11.08.2010 13:33

Цитата:

Сообщение от Gvozd (Сообщение 66971)
книга по отзывам, конечно хорошая.
НО!
чем вам не угодил официальный мануал?!
в нем описаны ВСЕ функции PHP

Абсолютно поддрживаю, к большинству функций ПХП в офф.мане приведены примеры, для пущей наглядности )


Часовой пояс GMT +3, время: 08:46.