Php xml для массива и обратно в xml

Содержание

Содержание

  • XMLWriter::endAttribute — Завершить атрибут
  • XMLWriter::endCdata — Завершить текущую секцию CDATA
  • XMLWriter::endComment — Завершить комментарий
  • XMLWriter::endDocument — Завершить текущий документ
  • XMLWriter::endDtdAttlist — Завершить текущий список атрибутов DTD
  • XMLWriter::endDtdElement — Завершить текущий элемент DTD
  • XMLWriter::endDtdEntity — Завершить текущую запись DTD
  • XMLWriter::endDtd — Завершить текущий DTD
  • XMLWriter::endElement — Завершить текущий элемент
  • XMLWriter::endPi — Завершить текущую инструкцию обработки (PI)
  • XMLWriter::flush — Сбросить текущий буфер
  • XMLWriter::fullEndElement — Завершить текущий элемент
  • XMLWriter::openMemory — Создать новый объект XMLWriter, используя память для строкового вывода
  • XMLWriter::openUri — Создать новый объект XMLWriter, используя исходный URI для вывода
  • XMLWriter::outputMemory — Возвращает текущий буфер
  • XMLWriter::setIndentString — Установить строку, используемую для отступов
  • XMLWriter::setIndent — Включить или отключить отступы
  • XMLWriter::startAttributeNs — Создать стартовый атрибут пространства имен
  • XMLWriter::startAttribute — Создать начальный атрибут
  • XMLWriter::startCdata — Создать начальный тег CDATA
  • XMLWriter::startComment — Создает стартовый комментарий
  • XMLWriter::startDocument — Создать тег документа
  • XMLWriter::startDtdAttlist — Создает стартовый список атрибутов DTD
  • XMLWriter::startDtdElement — Создать стартовый элемент DTD
  • XMLWriter::startDtdEntity — Создать стартовую запись DTD
  • XMLWriter::startDtd — Создать стартовый DTD тег
  • XMLWriter::startElementNs — Создать стартовый тег элемента пространства имен
  • XMLWriter::startElement — Создать стартовый тег элемента
  • XMLWriter::startPi — Создать стартовый тег PI
  • XMLWriter::text — Записать текст
  • XMLWriter::writeAttributeNs — Записать полный атрибут пространства имен
  • XMLWriter::writeAttribute — Записать полный атрибут
  • XMLWriter::writeCdata — Записать полный тег CDATA
  • XMLWriter::writeComment — Записать полный тег комментария
  • XMLWriter::writeDtdAttlist — Записать полный тег DTD AttList
  • XMLWriter::writeDtdElement — Записать полный тег элемента DTD
  • XMLWriter::writeDtdEntity — Записать полный тег DTD записи
  • XMLWriter::writeDtd — Записать полный тег DTD
  • XMLWriter::writeElementNs — Записать полное пространство имен тега элемента
  • XMLWriter::writeElement — Записать полный тег элемента
  • XMLWriter::writePi — Записать инструкцию обработки (PI)
  • XMLWriter::writeRaw — Записать необработанный XML-текст

Обработка ошибок

До настоящего момента подразумевалось, что входной документ оформлен корректно. Однако этого никто не может гарантировать. Как любой парсер XML, должен прекратить обработку, как только обнаружит ошибку оформления. Если это происходит, то функция возвращает false (ложь).

Теоретически, парсер может обрабатывать данные до первой обнаруженной им ошибки. В моих экспериментах с маленькими документами, однако, он сталкивается с ошибкой почти сразу. Лежащий в основе парсер предварительно анализирует большой участок документа, кэширует его, а затем выдает его по частям. Таким образом, он обычно определяет ошибки на предварительном этапе. В целях безопасности лучше не берите на себя ответственность за то, что сможете выполнить анализ контента до первой ошибки оформления. Более того, не предполагайте, что не увидите никакого контента до ошибки парсера. Если нужно принять только полные, корректно оформленные документы, то убедитесь, что скрипт не делает ничего необратимого до самого конца документа.

Если парсер обнаруживает ошибку в оформлении, то функция отображает сообщение об ошибке, аналогичное представленному (если настроен подробный отчет об ошибке, как и должно быть на сервере разработки):

<br />
<b>Warning</b>:  XMLReader::read() [<a href='function.read'>function.read</a>]:       
< value><double>10</double></value> in <b>/var/www/root.php</b> 
on line <b>35</b><br />

Вы, возможно, не захотите копировать отчет на страницу HTML, представляемую пользователю. Лучше фиксировать сообщение об ошибке в переменной среды . Для этого нужно включить опцию конфигурации в файле php.ini:

track_errors = On

По умолчанию опция отключена, что явно указано в php.ini, поэтому не забудьте изменить эту строку. Если вы добавите строку, показанную выше, в начало php.ini, то строка , которая написана ниже, заменит ее.

Эта программа должна посылать ответы только на полные, правильно оформленные входные данные. (Также достоверные, но об этом позже.) Таким образом, нужно подождать завершения анализа документа (выход из цикла ). Теперь проверьте, изменилось ли значение . Если нет, то документ оформлен корректно, и будет отправлено ответное сообщение XML-RPC. Если переменная задана, то это означает, что документ оформлен некорректно, и будет отправлен сигнал о сбое XML-RPC. Также сигнал о сбое отправляется, если запрашивается квадратный корень отрицательного числа. Смотрите листинг 8.

Листинг 8. Проверка корректного оформления
      // 	отправка запроса (request)
    $request = $HTTP_RAW_POST_DATA;
    error_reporting(E_ERROR | E_WARNING | E_PARSE);
    if (isset($php_errormsg)) unset(($php_errormsg);
    // создание программы считывания (reader)
    $reader = new XMLReader();
    // $reader->setRelaxNGсхемой("request.rng");
    $reader->XML($request);

    $input = "";
    while ($reader->read()) {
      if ($reader->name == "double" && $reader->nodeType == XMLReader::ELEMENT) {

          while ($reader->read()) {
            if ($reader->nodeType == XMLReader::TEXT
              || $reader->nodeType == XMLReader::CDATA
              || $reader->nodeType == XMLReader::WHITESPACE
              || $reader->nodeType == XMLReader::SIGNIFICANT_WHITESPACE) {
               $input .= $reader->value;
            }
            else if ($reader->nodeType == XMLReader::END_ELEMENT
              && $reader->name == "double") {
                break;
            }
          } 
          break;
      }
    } 

    // проверка корректного оформления входной информации
    if (isset($php_errormsg) ) fault(21, $php_errormsg);
    else if ($input < 0) fault(20, "Cannot take square root of negative number");
    else respond($input);

Здесь приведена упрощенная версия общего шаблона обработки потоков XML. Парсер заполняет структуру данных, в соответствии с которой выполняются действия, когда документ заканчивается. Обычно структура данных проще, чем сам документ. Здесь структура данных особенно простая: единственная строка.

Чтение документа

Функция перемещает парсер к следующему маркеру. Самый простой подход заключается в выполнении итераций цикла по всему документу:

while ($reader->read()) {
  // обрабатывающий  код...
}

По окончании закройте парсер, чтобы освободить ресурсы, которые он занимает, и перенастройте его для следующего документа:

$reader->close();

Внутри цикла парсер помещается в определенном узле: в начале элемента, в конце элемента, в текстовом узле, в комментарии и так далее. Следующие свойства позволяют узнать, что парсер просматривает в данный момент:

  • — это локальное, предварительно не заданное имя узла.
  • — возможное предварительно заданное имя узла. Для таких узлов, которые не имеют имен, например, комментариев, это , , , и т. д., как в DOM (объектная модель документов).
  • — это унифицированный идентификатор ресурса (URI) для пространства имен узла.
  • — это целое число, представляющее тип узла — к примеру, 2 для узла атрибута и 7 — для оператора обработки.
  • — это префикс пространства имен узла.
  • — это текстовое содержание узла.
  • — верно, если узел имеет текстовое значение и неверно в противном случае.

Конечно, не все типы узлов обладают всеми этими свойствами. Например, текстовые узлы, CDATA-разделы, комментарии, операторы обработки, атрибуты, символ пробела, типы документов и описания XML имеют значения. Другие типы узлов (в особенности – элементы и документы) – не имеют. Обычно программа использует свойство для определения того, что просматривается, и выдачи соответствующего ответа. В листинге 3 показан простой цикл , который использует эти функции для вывода того, что он просматривает. В листинге 4 показан результат работы этой программы, когда ей на вход подается листинг 1.

Листинг 4. Вывод из листинга 3
methodCall
#text: 
  
methodName
#text: sqrt
methodName
#text: 
  
params
#text: 
    
param
#text: 
      
value
double
#text: 10
double
value
#text: 
    
param
#text: 
  
params
#text: 

methodCall

Большая часть программ не так универсальна. Они принимают входные данные в особой форме и обрабатывают их определенным образом. В примере XML-RPC нужно считать только один параметр из входных данных: элемент , который должен быть только один. Чтобы это сделать, найдите начало элемента с именем :

if ($reader->name == "double" 
  && $reader->nodeelementType == XMLReader::element) {
    // ...
}

У этого элемента также есть единственный текстовый дочерний узел, который можно считывать, перемещая парсер к следующему узлу:

if ($reader->name == "double" && $reader->nodeType == XMLReader::ELEMENT) {
    $reader->read();
    respond($reader->value);
}

Здесь функция создает ответ XML-RPC и отправляет его клиенту. Однако, прежде чем я покажу это, необходимо рассказать еще кое-что. Нет никакой гарантии того, что элемент в документе запроса содержит только один текстовый узел. Он может содержать несколько узлов, а также комментарии и операторы. Например, это может выглядеть следующим образом:

 <value><double>
  <!--value follows-->6.<!--fractional part next-->0
</double></value>
Вложенные элементы

В данной схеме есть один возможный дефект. Вложенные элементы , например, могут нарушить этот алгоритм. Это неправильный XML-RPC, и вскоре вы увидите, как использовать валидацию RELAX NG, чтобы отклонить все такие документы. В таких типах документов, как, например, расширяемый язык гипертекстовой разметки (XHTML), которые допускают вложение одинаковых элементов друг в друга (например, внутри ), также нужно отслеживать глубину элементов, чтобы убедиться, что конечный тег правильно соотнесен с начальным тегом.

Устойчивое решение проблемы должно обеспечивать получение всех потомков текстового узла , объединять их в цепочку и только затем конвертировать результат в . Необходимо избегать любых комментариев или других возможных нетекстовых узлов. Это немного сложнее, но, как показано в листинге 5, не слишком.

Листинг 5. Суммируйте весь текстовый контент элемента
  while ($reader->read()) {
    if ($reader->nodeType == XMLReader::TEXT
      || $reader->nodeType == XMLReader::CDATA
      || $reader->nodeType == XMLReader::WHITESPACE
      || $reader->nodeType == XMLReader::SIGNIFICANT_WHITESPACE) {
       $input .= $reader->value;
    }
    else if ($reader->nodeType == XMLReader::END_ELEMENT
      && $reader->name == "double") {
        break;
    }
  }

Пока весь остальной контент документа можно игнорировать. (Позже я продолжу описание обработки ошибок).

Реализация тестового драйвера для xml2json

Фрагмент кода, приведенный в , представляет собой тестовый драйвер, применяющий логику преобразования .


Листинг 7. xml2json_test.php
<?php
    require_once("xml2json.php");

    // Имя файла, из которого читается XML-содержимое.
    $testXmlFile = "";

    // Прочитать имя файла из командной строки.
    if ($argc <= 1) {
        print("Please provide the XML filename as a command-line argument:\n");
        print("\tphp -f xml2json_test.php test1.xml\n");
        return;
    } else {
        $testXmlFile = $argv;
    }

    //Прочитать XML-содержимое из входного файла.
    file_exists($testXmlFile) or die('Could not find file ' . $testXmlFile);
    $xmlStringContents = file_get_contents($testXmlFile);

    $jsonContents = "";
    // Преобразовать в формат JSON.
    // xml2json просто принимает объект String, содержащий XML-содержимое,
    // в качестве входного параметра.
    $jsonContents = xml2json::transformXmlStringToJson($xmlStringContents);

    echo("JSON formatted output generated by xml2json:\n\n");
    echo($jsonContents);
?>

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

php -f xml2json_test.php test2.xml

При выполнении из командной строки программа читает XML-содержимое из файла в строковую переменную. Затем она вызывает статическую функцию в классе для получения результата в JSON-формате. Кроме выполнения программы из командной строки вы можете изменить логику в этом исходном файле для предоставления преобразователя в виде вызываемого Web-сервиса, использующего протоколы доступа Simple Object Access Protocol (SOAP) или Representational State Transfer (REST). При необходимости можно легко сделать это в PHP с минимальными затратами.

В приведен один из четырех тестовых XML-файлов, поставляемых со статьей для тестирования реализации . Степень сложности этих файлов различна. Вы можете передать один из этих файлов в виде аргумента командной строки в тестовый драйвер xml2json_test.php.

Листинг 8. Тестирование реализации xml2json с test2.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book id="1">
        <title>Code Generation in Action</title>
        <author><first>Jack</first><last>Herrington</last></author>
        <publisher>Manning</publisher>
    </book>

    <book id="2">
        <title>PHP Hacks</title>
        <author><first>Jack</first><last>Herrington</last></author>
        <publisher>O'Reilly</publisher>
    </book>

    <book id="3">
        <title>Podcasting Hacks</title>
        <author><first>Jack</first><last>Herrington</last></author>
        <publisher>O'Reilly</publisher>
    </book>
</books>

Фрагмент кода, приведенный в , представляет собой результат в формате JSON при использовании файла test2.xml в качестве аргумента командной строки для тестового драйвера xml2json_test.php.

Листинг 9. Результат в JSON-формате для test2.xml
{
   "books" : {
      "book" : }
}

Обратите внимание на то, что XML-атрибут для элемента сохраняется в JSON-данных как свойство объекта , а элемент сохраняется как массив объектов. Полученные данные в JSON-формате готовы для приема в JavaScript-коде с использованием выражения

DOM в действии

Модель DOM, реализованная в PHP5, — это та же спецификация W3C DOM, с которой вы имеете дело в браузере и с которой работаете посредством JavaScript. Используются те же методы, так что способы кодирования покажутся вам знакомыми. Листинг 2 иллюстрирует использование DOM для создания XML-строки и XML-документа, отформатированных в целях читабельности.

Листинг 2. Применение DOM
<?php 

//Создает XML-строку и XML-документ при помощи DOM 
$dom = new DomDocument('1.0'); 

//добавление корня - <books> 
$books = $dom->appendChild($dom->createElement('books')); 

//добавление элемента <book> в <books> 
$book = $books->appendChild($dom->createElement('book')); 

// добавление элемента <title> в <book> 
$title = $book->appendChild($dom->createElement('title')); 

// добавление элемента текстового узла <title> в <title> 
$title->appendChild( 
                $dom->createTextNode('Great American Novel')); 

//генерация xml 
$dom->formatOutput = true; // установка атрибута formatOutput
                           // domDocument в значение true 
// save XML as string or file 
$test1 = $dom->saveXML(); // передача строки в test1 
$dom->save('test1.xml'); // сохранение файла 
?>

Это приводит к созданию выходного файла, приведенного в листинге 3.

Листинг 3. Выходной файл
 <?xml version="1.0"?>
<books>
  <book>
    <title>Great American Novel</title>
  </book>
</books>

Листинг 4 импортирует объект в объект , иллюстрируя взаимодействие DOM и SimpleXML.

Листинг 4. Взаимодействие, часть 1 — DOM импортирует SimpleXML
<?php

$sxe = simplexml_load_string('<books><book><title>'.
      'Great American Novel</title></book></books>');

if ($sxe === false) {
  echo 'Error while parsing the document';
  exit;
}

$dom_sxe = dom_import_simplexml($sxe);
if (!$dom_sxe) {
  echo 'Error while converting XML';
  exit;
}

$dom = new DOMDocument('1.0');
$dom_sxe = $dom->importNode($dom_sxe, true);
$dom_sxe = $dom->appendChild($dom_sxe);

echo $dom->save('test2.xml');

?>

Функция из листинга 5 берет узел документа DOM и превращает его в узел SimpleXML. Затем этот новый объект можно использовать в качестве «родного» элемента SimpleXML. В случае любой ошибки возвращается значение FALSE.

Листинг 5. Взаимодействие, часть 2 — SimpleXML импортирует DOM
<?php
$dom = new domDocument;
$dom->loadXML('<books><book><title>Great American 
Novel</title></book></books>');
if (!$dom) {
   echo 'Error while parsing the document';
   exit;
}

$s = simplexml_import_dom($dom);

echo $s->book->title; // Great American Novel
?>

PHP SimpleXML — Read From File

The PHP function is used to read XML data from a file.

Assume we have an XML file called «note.xml», that looks like this:

<?xml version=»1.0″ encoding=»UTF-8″?> <note>   <to>Tove</to>   <from>Jani</from>   <heading>Reminder</heading>   <body>Don’t forget me this weekend!</body> </note>

The example below shows how to use the function to read XML data from a file:

Example


<?php $xml=simplexml_load_file(«note.xml») or die(«Error: Cannot create object»); print_r($xml); ?>

The output of the code above will be:

SimpleXMLElement Object ( => Tove => Jani => Reminder => Don’t forget me this weekend! )

Tip: The next chapter shows how to get/retrieve node values from an XML file with SimpleXML!

XPath

Такие выражения как великолепны, только если вы точно знаете, какие элементы находятся в документе, и где точно они находятся. Однако вы далеко не всегда это знаете. Например, в XHTML элементы в заголовке (,,, и т.д.) могут быть дочерними от , , и от нескольких других элементов. Более того, , , и другие элементы могут быть вложены друг в друга множество раз. Для многих менее определенных случаев использования, легче использовать выражения XPath, такие как или . SimpleXML имеет этот набор функциональных возможностей через функцию .

показывает страницу PHP, которая содержит все заголовки в документе RSS – как заголовок самого канала, так и заголовки отдельных групп элементов.

Листинг 8. Использование XPath для нахождения элементов заголовков
<html xml:lang="en" lang="en">
<head>
  <title>XPath Example</title>
</head>
<body>

<?php
$rss =  simplexml_load_file('http://partners.userland.com/nytRss/nytHomepage.xml');
foreach ($rss->xpath('//title') as $title) {
  echo "<h2>". $title. "</h2>";
}
?>

</body>
</html>

SimpleXML поддерживает только строковые выражения XPath, задающие местонахождении файла и объединения этих выражений. Он не поддерживает выражения XPath, которые не возвращают множества узлов, таких как или.

Начиная с PHP версии 5.1, SimpleXML может создавать XPath-запросы относительно документов с пространствами имен. Как обычно в XPath, строковое выражение, задающее местонахождение файла, должно использовать префиксы пространств имен, даже если искомый документ использует пространство имен по умолчанию. Функция ассоциирует префикс с пространством имени URI для использования в следующем запросе. Например, если вы хотите найти все элементы в документе, вы используете код подобный представленному в .

Листинг 9. Использование XPath с пространствами имен
$atom =  simplexml_load_file('http://www.cafeconleche.org/today.atom');
$atom->registerXPathNamespace('atm', 'http://www.w3.org/2005/Atom');
$titles = $atom->xpath('//atm:title');
foreach ($titles as $title) {
  echo "<h2>". $title. "</h2>";
}

Еще одно последнее предупреждение: XPath в PHP работает довольно медленно. Загрузка страницы может занимать от мгновения до нескольких секунд, когда я переключился на это XPath выражение, даже на незагруженном местном сервере. Если вы используете эти приемы, вы должны использовать какого-то рода кэширование для разумной работы. Динамическое генерирование каждой страницы просто не сработает.

Чтение, обработка и написание XML в PHP5

SimpleXML, при необходимости в сочетании с DOM, — идеальный выбор для чтения, обработки и составления в РНР5 простых, предсказуемых и относительно компактных документов.

Краткий обзор предпочтительных API

Из множества API, присутствующих в РНР5, DOM — самый знакомый, а на SimpleXML проще всего программировать. В типичных ситуациях, таких как те, что мы здесь рассматриваем, они наиболее эффективны.

Расширение DOM


Document Object Model (DOM) — это принятый W3C стандартный набор объектов для документов HTML и XML, стандартная модель сочетания этих объектов и стандартный интерфейс для доступа к ним и манипуляций с ними. Многие поставщики поддерживают DOM в качестве интерфейса к своим специальным структурам данных и API, благодаря чему модель DOM знакома массе разработчиков. DOM легко освоить и применять, так как его структура в памяти напоминает исходный документ XML. Чтобы передать информацию приложению, DOM создает дерево объектов, которое в точности повторяет дерево элементов файла XML, так что каждый элемент XML служит узлом этого дерева. DOM — это парсер, основанный на древовидной структуре. Поскольку DOM строит дерево всего документа, он потребляет много ресурсов памяти и времени процессора. Поэтому анализ очень крупных документов посредством DOM непрактичен из-за проблем производительности. В контексте данной статьи расширение DOM используется главным образом из-за его способности импортировать формат SimpleXML и выводить XML в формате DOM, или, наоборот, для использования в качестве строковых данных или XML-файла.

SimpleXML

Расширение SimpleXML – это предпочтительный инструмент для синтаксического анализа XML. Для его работы требуется РНР5. Оно взаимодействует с DOM при составлении XML-файлов и имеет встроенную поддержку XPath. SimpleXML лучше всего работает с несложными данными типа записей, такими как XML, передаваемый в виде документа или строки из другой части того же приложения. Если XML-документ не слишком сложный, не слишком глубокий и не содержит смешанного контента, для SimpleXML кодировать проще, чем для DOM, как и предполагает название. К тому же он надежнее при работе с известной структурой документа.

Load and Output XML

We want to initialize the XML parser, load the xml, and output it:

<?php $xmlDoc = new DOMDocument(); $xmlDoc->load(«note.xml»); print $xmlDoc->saveXML(); ?>

The output of the code above will be:

Tove Jani Reminder Don’t forget me this weekend!

If you select «View source» in the browser window, you will see the following HTML:

<?xml version=»1.0″ encoding=»UTF-8″?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don’t forget me this weekend!</body> </note>

The example above creates a DOMDocument-Object and loads the XML from «note.xml» into it.

Then the saveXML() function puts the internal XML document into a string, so we can output it.

PHP SimpleXML — Get Node Values — Loop

The following example loops through all the <book> elements in the «books.xml» file, and gets the node values of the <title>, <author>, <year>, and <price> elements:

Example


<?php$xml=simplexml_load_file(«books.xml») or die(«Error: Cannot create object»);foreach($xml->children() as $books) {   echo $books->title . «, «;   echo $books->author . «, «;   echo $books->year . «, «;   echo $books->price . «<br>»; } ?>

The output of the code above will be:

Everyday Italian, Giada De Laurentiis, 2005, 30.00Harry Potter, J K. Rowling, 2005, 29.99XQuery Kick Start, James McGovern, 2003, 49.99 Learning XML, Erik T. Ray, 2003, 39.95

Основы PHP

Большинство читателей этой статьи уже работают с РНР, но, возможно, незнакомы с его историей и эволюцией.

О PHP

Hypertext Preprocessor (PHP) — это не зависящий от платформы язык сценариев, используемый для создания динамических Web-страниц и серверных приложений. Он начинался как Personal Home Page/Form Interpreter (PHP/FI) и обрел новую жизнь в руках Сураски (Suraski) и Гутманса (Gutmans), которые в июне 1998 года выпустили РНР3. Их компания Zend Technologies до сих пор управляет разработкой PHP.

В июле 2004 года вышел PHP5 с Zend Engine II и многими новыми функциями, такими как:

  • Поддержка объектно-ориентированного программирования
  • Улучшенная поддержка MySQL
  • Улучшенная поддержка XML

PHP5 и XML

Поддержка XML присутствовала в РНР с самых ранних версий, но в РНР5 она существенно улучшена. Поддержка XML в РНР4 была ограниченной, в частности, предлагался только включенный по умолчанию парсер на базе SAX, а поддержка DOM не соответствовала стандарту W3C. В РНР5 разработчики PHP XML, можно сказать, изобрели колесо, обеспечив соответствие общепринятым стандартам.

Новое в поддержке XML в версии PHP5

PHP5 содержит полностью переписанные и новые расширения, включая парсер SAX, DOM, SimpleXML, XMLReader, XMLWriter и процессор XSLT. Теперь все эти расширения основаны на libxml2.

Наряду с улучшенной по сравнению с PHP4 поддержкой SAX, в РНР5 реализована поддержка DOM в соответствии со стандартом W3C, а также расширение SimpleXML. По умолчанию включены и SAX, и DOM, и SimpleXML. Тем, кто знаком с DOM по другим языкам, станет проще реализовать аналогичную функциональность в РНР

Заключение

PHP5 предлагает большое разнообразие методов парсинга. Парсинг при помощи DOM, который теперь полностью совместим со стандартом W3C, — знакомый вариант, подходящий для сложных, но относительно компактных документов. SimpleXML — это способ работы с простыми и не слишком объемными документами, а потоковый парсер XMLReader, который легче и быстрее, чем SAX, предпочтителен для очень больших документов.

Похожие темы

  • Оригинал статьи (EN).
  • XML для PHP-разработчиков, часть 1: Работа с XML в PHPза 15 минут (Клифф Морган, developerWorks, февраль 2007 г.): В первой статье этой серии из трех частей рассказывается о реализации XML в РНР5 и о том, как легко работать с XML в среде РНР.
  • XML для PHP-разработчиков, часть 3: дополнительные методы чтения, организации и составления XML-документов (Клифф Морган, developerWorks, март 2007 г.): в заключительной части серии из трех статей об XML для РНР-разработчиков рассказывается о методах чтения, обработки и составления XML-документов в РНР5.(EN)
  • SAX, the power API (Benoît Marchal, developerWorks, август 2001 г.): Введение в SAX, сравнение DOM и SAX, инструкции по работе с SAX (EN).
  • Reading and writing the XML DOM in PHP (Jack Herrington, developerWorks, декабрь 2005 г.): Три метода чтения XML: библиотека DOM, синтаксический анализатор SAX и регулярные выражения. Также рассказывается, как писать XML с применением текстовых шаблонов DOM и PHP (EN).
  • What kind of language is XSLT (Michael Kay, developerWorks, апрель 2005 г.): Об истоках языка XSLT и его преимуществах (EN).
  • Tip: Implement XMLReader: An interface for XML converters (Benoît Marchal, developerWorks, ноябрь 2003 г.): В этой статье исследуются API для конвейеров XML и причины, по которым знакомый интерфейс XMLReader подходит для многих компонентов. (EN)
  • SimpleXML Processing with PHP (Elliotte Rusty Harold, developerWorks, октябрь 2006 г.): Расширение SimpleXML позволяет PHP-страницам обращаться к XML с запросами, вести в них поиск, модифицировать и повторно публиковать его (EN).
  • A PHP5 migration guide (Jack Herrington, developerWorks, September 2006 г.): Как перенести код, разработанный в PHP V4, на PHP V5, значительно улучшив его обслуживаемость и стабильность (EN).
  • Introducing Simple XML in PHP5 ( Alejandro Gervasio, Dev Shed, июнь 2006 г.): первая часть серии из трех статей, посвященных SimpleXML. Введение в расширение simplexml для РНР5 — библиотеку, предназначенную главным образом для синтаксического анализа простых XML-файлов (EN).
  • PHP Cookbook, Second Edition (Adam Trachtenberg and David Sklar, O’Reilly Media, август 2006 г.): О создании динамических Web-приложений, работающих с любыми Web-браузерами (EN).
  • XML.com: Сайт O’Reilly с обширной информацией по XML (EN).
  • W3C XML Information: Спецификация XML из первоисточника (EN).
  • Сайт, посвященный PHP-разработке (EN)
  • PEAR: PHP Extension and Application Repository: Подробные сведения о PEAR, среде разработки и системе дистрибуции РНР-компонентов (EN).
  • PECL: PHP Extension Community Library: Родственный сайт по PEAR и репозиторий расширений PHP (EN).
  • Planet PHP: Новости сообщества PHP-разработчиков (EN).
  • xmllib2: XML-парсер на языке C и набор инструментов от Gnome.(EN)
  • Сертификация IBM по XML: Как стать сертифицированным IBM разработчиком XML и родственных технологий. (EN)
  • Техническая библиотека по XML: Широкий спектр технических статей и рекомендаций, руководств, стандартов и технических руководств IBM в разделе XML сайта developerWorks. (EN)
  • Используйте в своем следующем Open Source-проекте ознакомительное ПО IBM, которое можно загрузить прямо с сайта developerWorks.(EN)

С этим читают