Итак, столкнулся я с задачей сгенерировать XML-документ. Довольно простой. Но я понял, что зря я не работал с XML раньше. Благо, в сети нашелся туториал, который замечтательно подошел мне. И на этом примере вполне можно освоить основы этой нехитрой генерации…
Найдено это было тут:
http://weblog.bignerdranch.com/?p=8, все копирайты принадлежат их авторам. Сдесь же я вкратце приведу пример.
Надо сделать такое:
< ?xml version="1.0" encoding="iso-8859-1"?>
<teams>
<team>
<name>Atlanta Braves</name>
<stadium>Turner Field</stadium>
<league>National</league>
</team>
<team>
<name>Chicago Cubs</name>
<stadium>Wrigley Field</stadium>
<league>National</league>
</team>
...
<team>
<name>Baltimore Orioles</name>
<stadium>Camden Yards</stadium>
<league>American</league>
</team>
...
</teams>
<teams>
<team>
<name>Atlanta Braves</name>
<stadium>Turner Field</stadium>
<league>National</league>
</team>
<team>
<name>Chicago Cubs</name>
<stadium>Wrigley Field</stadium>
<league>National</league>
</team>
...
<team>
<name>Baltimore Orioles</name>
<stadium>Camden Yards</stadium>
<league>American</league>
</team>
...
</teams>
И сделать его можно так:
<?php
// xml_teams_dom.php
// create the new XML document
$dom = new DOMDocument('1.0', 'iso-8859-1');
// create the root element
$list_of_teams = $dom->createElement('teams');
$dom->appendChild($list_of_teams);
// create the first team element
$team = $dom->createElement('team');
$list_of_teams->appendChild($team);
// now create all the subelements for the team
$name = $team->appendChild($dom->createElement('name'));
$name->appendChild($dom->createTextNode('Atlanta Braves'));
$stadium = $team->appendChild($dom->createElement('stadium'));
$stadium->appendChild($dom->createTextNode('Turner Field'));
$league = $team->appendChild($dom->createElement('league'));
$league->appendChild($dom->createTextNode('National'));
// create the second team element
$team = $dom->createElement('team');
$list_of_teams->appendChild($team);
// now create all the subelements for the second team
$name = $team->appendChild($dom->createElement('name'));
$name->appendChild($dom->createTextNode('Chicago Cubs'));
$stadium = $team->appendChild($dom->createElement('stadium'));
$stadium->appendChild($dom->createTextNode('Wrigley Field'));
$league = $team->appendChild($dom->createElement('league'));
$league->appendChild($dom->createTextNode('National'));
$xml_result = $dom->saveXML();
// simple mechanism to see the XML
print < <<textarea name="xml_result" rows="40" cols="80">$xml_result XML_SHOW; ?>
// xml_teams_dom.php
// create the new XML document
$dom = new DOMDocument('1.0', 'iso-8859-1');
// create the root element
$list_of_teams = $dom->createElement('teams');
$dom->appendChild($list_of_teams);
// create the first team element
$team = $dom->createElement('team');
$list_of_teams->appendChild($team);
// now create all the subelements for the team
$name = $team->appendChild($dom->createElement('name'));
$name->appendChild($dom->createTextNode('Atlanta Braves'));
$stadium = $team->appendChild($dom->createElement('stadium'));
$stadium->appendChild($dom->createTextNode('Turner Field'));
$league = $team->appendChild($dom->createElement('league'));
$league->appendChild($dom->createTextNode('National'));
// create the second team element
$team = $dom->createElement('team');
$list_of_teams->appendChild($team);
// now create all the subelements for the second team
$name = $team->appendChild($dom->createElement('name'));
$name->appendChild($dom->createTextNode('Chicago Cubs'));
$stadium = $team->appendChild($dom->createElement('stadium'));
$stadium->appendChild($dom->createTextNode('Wrigley Field'));
$league = $team->appendChild($dom->createElement('league'));
$league->appendChild($dom->createTextNode('National'));
$xml_result = $dom->saveXML();
// simple mechanism to see the XML
print < <<textarea name="xml_result" rows="40" cols="80">$xml_result XML_SHOW; ?>
Собственно, мне было не столь важно описание, поскольку в теории все понятно, сколько практический пример.
Одна проблема – всё это будет работать только если PHP был собран с расширением DOMXML.
sas171
September 16th, 2006
Я использую Ubuntu последней версии (development, на текущий момент – 6.10). И там все замечательно собрано с ним.
Честно говоря, я уже очень давно отвык что-то собирать руками, если на то нет острой необходимости. И уже года два лично у меня такой не возникало.
dm
September 16th, 2006
это когда имеешь доступ к серверу, а когда сайт лежит на каком-то хостинге, тем более дешевом, то ситуация выглядит иначе. Просто сам в такую ситуацию, хотя DOMXML мне очень нравится я его не могу использовать – сильно усложняет жизнь.
sas171
September 16th, 2006
Согласен. Можно попробовать модуль загружать через dl(), но не факт что выйдет.
Честно говоря, я бы советовал не использовать такие “дешевые” хостинги, так как бесплатный сыр бывает только в мышеловке. Из того, что могу посоветовать, это
tanhost.com || booben.com
dm
September 18th, 2006