четверг, 22 ноября 2007 г.

Создание XML на php

Все знают о DOM функциях в javascript. При помощи них можно создать или изменить дерево документа динамически. В языке php тоже предусмотрен целый набор DOM

функций, причем они не требуют никаких дополнительных библиотек, так как являются частью ядра php.

Функции DOM очень удобно использовать при создании XML файлов.
Рассмотрим небольшой пример: нужно построить XML такого вида:


<?xml version="1.0" encoding="UTF-8"?>
<Товары>
<Клавиатура КоличествоКнопок="108">
<Бренд>Logitech</Бренд>
<Тип>проводная</Тип>
<Модель>KB-2025</Модель>
<Производитель>Тайвань</Производитель>
</Клавиатура>
</Товары>


Чтобы реализовать это при помощи DOM функций, создаем объект DOMDocument. Это следует сделать так:
$dom = new DOMDocument("1.0");

Основные методы, которые нам понадобятся:


  • $dom->createElement(имя_элемента) - создает XML элемент

  • $dom->createAttribute(имя_аттрибута) - создает аттрибут для элемента

  • $dom->createTextNode(текст) - создает текстовый элемент (узел)

  • $Node->appendChild(объект_Node) - применяет узел к указанному элементу


Далее приведен код с комментариями:

<?php
$dom = new DOMDocument("1.0");
// создаем корневой элемент 'Товары'
$root = $dom->createElement('Товары');
// создаем товар 'Клавиатура'
$keyb = $dom->createElement('Клавиатура');
// создаем аттрибут для клавиатуры
$q = $dom->createAttribute('КоличествоКнопок');
// применяем аттрибут для клавиатуры
$keyb->appendChild($q);
// добавляем элемент 'Клавиатура' к корневому элементу
$root->appendChild($keyb);

// создаем элемент 'Бренд'
$brand = $dom->createElement('Бренд');
// создаем текстовый узел
$txt = $dom->createTextNode('Logitec');
// записываем текст в содержимое тега 'Бренд'
$brand->appendChild($txt);

// располагаем 'Бренд' внутри тега 'Клавиатура'
$keyb = $dom->appendChild($brand);
// ...
?>


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


// сохраняем файл
$dom->save('file.xml');

Кроме этого можно не сохранять данные в файл, а получить их в виде строки:

// получаем строку
$str = $dom->saveXML();

4 комментария:

GIN комментирует...

Спасибо. Доступно и понятно.

Анонимный комментирует...

Отличная статья!
Очень помогла

Анонимный комментирует...

Вставил пример.
в файл вставился узел Бренд с текстом Logitec. А где всё остальное?:(
Обьясните пожалуйста в чем проблема?

Анонимный комментирует...

$root= $dom->appendChild($dom->createElement('xml',''));