РНР 5 в подлиннике

Страница 456 из 554


Глава 41. Расширение SIMPLEXML

921

Корневой тег <game> в атрибуте moves хранит количество сделанных ходов. Теги <ц>, <12>, <13> описывают строки поля игры. Теги <ci>, <с2>, <сЗ> — столбцы, содержащие значения х, о или пробел. Атрибут move хранит номер хода, при котором было выставлено указанное значение.

В листинге 41.2 приведен текст PHP-программы с использованием расширения SIMPLEXML, устанавливающей символ о в третий столбец первой строки.

| Листинг 41.2. Файл move13.php

<?php ## Пример скрипта movel3.php, использующего расширение SIMPLEXML.

$game = simplexml_load_file (' game .xml') ;

$move = $game['moves']+1;

$game['moves 1] = $move;

$game->ll->c3['move'] = $move;

$game->ll->c3 = 'O';

echo $game->asXML () ;

?>

Функция simpiexmi_ioad_fiie() расширения SIMPLEXML создает объект класса simpiexmieiement и записывает в не го структуру XML-файла game.xml.

Атрибуты элемента доступны в экземпляре класса simpiexmi_eiement как значения ассоциативного массива. Получить значение атрибута moves корневого тега можно через выражение: $game [ 'moves']. Причем атрибуты доступны как на чтение, так и на запись. Выражение

$game['moves']=$move;

записывает значение переменной $move в атрибут moves корневого тега.

Дочерние элементы доступны как свойства экземпляра класса с именем, соответствующим имени элемента. К элементу <и> корневого тега можно обратиться как $дате->и. Соответственно, дочерний элемент <сЗ> дочернего элемента <и> описывается выражением: $дате->11->сЗ.

Выражение

$game->ll->c3['move']=$move;

записывает значение переменной $move в атрибут move элемента сз подэлемента и. Выражение

$game->ll->c3='0';

определяет содержимое элемента сз подэлемента и.

Метод asXMLO экземпляра класса simpiexmi_eiement формирует XML-строку созданного документа.

В результате работы скрипта moveI3.php мы получим результат, показанный в листинге 41.3.

I Листинг 41.3. Результат работы программы move13.php

<?xml version="l.0"?> <game moves="4">

922

Часть VI. XML в РНР 5

<11><с1 move="2">0</cl><c2 move=" "> </с2><сЗ move="4 ">0</сЗх/11> <12><с1 move=" "> </cl><c2 move="l">X</c2xc3 move=" "> </сЗ></12> <13><с1 move=" "> </cl><c2 move=" "> </с2хсЗ move="3">0</c3></13> </game>

Как вы видите, программа с использованием расширения SIMPLEXML выглядит намного компактнее. Тот же алгоритм, записанный с помощью стандарта DOM, выглядит раза в два длиннее (листинг 41.4).

Листинг 41.4. Файл move13dom.php

<?php ## Пример скрипта move13dom.php, использующего расширение dom. $dom = new domDocument;

$dom->load(1 game .xml1); // загрузить документ

$game = $dom->documentElement; // корневой элемент

$move = $game->getAttribute('moves')+1; // атрибут moves корневого элемента $game->setAttribute('moves', $move); // установить новое значение foreach ($game->childNodes as $1) { // для всех дочерних элементов if ($l->nodeName == '11') { // искомый элемент 11?

foreach ($l->childNodes as $c) { // для всех дочерних элементов if ($c->nodeName == 1сЗ') { // искомый элемент сЗ?

// установить атрибут move и значение элемента $c->setAttribute('move', $move); $c->firstChild->data = 'О';

}

}

}

echo $dom->saveXML();

Загрузка и сохранение XML-документов

Так же как и в стандарте DOM, при загрузке и сохранении XML-документов вы можете использовать как файл, так и строку.

Загрузка XML-документа осуществляют следующие функции. simplexml_element simplexml_load_file(string filename)

Функция возвращает объект класса simpiexml_element, содержащий дерево XML-документа файла filename.

simplexml_element simplexml_load_string(string xzal_string)

Функция возвращает объект класса simplexml_eiement, содержащий дерево XML-документа строки xml_string.

Обратите внимание на то, что в отличие от~расширения DOM, где для загрузки документа используются методы объекта класса domDocument, в расширении SIMPLEXML для загрузки документа используются функции.




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006