Аргерих Л. О языке РНР. Часть 5. Страница 25


Этот код выводит содержимое файла XML в броузер, но это не тот формат, который нам нужен. Обратите внимание, что за каждым элементом Travel- package следуют значения атрибутов его элементов, как для Package. Из этого следует, что вложенность элементов не была соблюдена при построении или анализе дерева (рис. 21.6):

Чтобы получить требуемый HTML, надо проделать еще некоторую работу.

Начало этого файла такое как в предыдущем примере. Мы создаем но­вый экземпляр объекта XML с именем $doc и новый контекст для XPath с именем $context:

<html> <tiead>

<title>DOM Travel Packages</title> </head>

<body>

<h1>Travel Packages</h1> <table> <?php

$doc = domxml_open_file(( "travel, xml''); {context = xpath_new_context(Sdoc);

$root = $doc->document_element();

Узел Travelpackage будет выступать в качестве абстрактного разделителя строк для этого документа. У Travelpackage есть атрибут name. Значение этого атрибута применяется для поиска каждой группы узлов, которую надо извлечь из дерева DOM. Создадим массив, собирающий вместе все дочерние узлы Travelpackage name="x". С помощью цикла for обойдем массив и исполь­зуем массив как значение в команде XPath:

$var = arrayC'a", "b"):

for ($x = 0; $x < count($var); $x++) { $path = xpath_eval($context,

"//Travelpackage[@name=\"$var[$x]\"]/Country_name");

StmpArray =

Первая команда XPath пре­

вратится в //Travelpackage[@name="a" ]/Country_name во время первого прохода цикла for. Все узлы с именем Country_name, являющиеся дочерними для Tra­velpackage, где name="a", будут записаны в $tmpArray. Эту команду xpath_eval можно было бы заключить в условный оператор чтобы улучшить обра­ботку ошибок, как показано в предыдущем примере кода:

echo( "<trxtd>"); echo($fmpArray[0]->name); echo("</td><td><a href=\"#\">"); echo($tmpArray[0]->content); echo( "</ax/td></t r>\n");

Мы собрали некоторую информацию об узлах и теперь выведем ее в таблицу. Массив $tmpAг ray может хранить не только имя или содержимое. В зависи­мости от документа XML, он может также содержать тип, узел, атрибуты, комментарии и/или инструкции обработки. Если бы мы выполнили то увидели бы элементы массива. Вот как они выглядят для этого кода и документа XML:

Array (

[0] => DomNode Object (