DOMDocument::xinclude

(PHP 5)

DOMDocument::xinclude Проводит вставку XInclude разделов в объектах DOMDocument

Описание

public int DOMDocument::xinclude ([ int $options ] )

Этот метод вставляет » XInclude блоки в объекте класса DOMDocument.

Замечание:

Вследствие того, что libxml2 автоматически разрешает сущности, вызов этого метода приведет к неожидаемым результатам в случае, когда XML файл содержит прикрепленную схему DTD.

Список параметров

options

параметры libxml. Доступно, начиная с PHP 5.1.0 и Libxml 2.6.7.

Возвращаемые значения

Возвращает количество блоков XInclude в документе, -1 если при обработке произошла ошибка, либо FALSE, если не было произведено ни одной замены.

Примеры

Пример #1 Пример использования DOMDocument::xinclude()

<?php

$xml 
= <<<EOD
<?xml version="1.0" ?>
<chapter xmlns:xi="http://www.w3.org/2001/XInclude">
 <title>Books of the other guy..</title>
 <para>
  <xi:include href="book.xml">
   <xi:fallback>
    <error>xinclude: book.xml not found</error>
   </xi:fallback>
  </xi:include>
 </para>
</chapter>
EOD;

$dom = new DOMDocument;

// Оформим вывод красиво
$dom->preserveWhiteSpace false;
$dom->formatOutput true;

// загрузка XML строки, определенной выше
$dom->loadXML($xml);

// вставка блока xinclude
$dom->xinclude();

echo 
$dom->saveXML();

?>

Результатом выполнения данного примера будет что-то подобное:

<?xml version="1.0"?>
<chapter xmlns:xi="http://www.w3.org/2001/XInclude">
  <title>Books of the other guy..</title>
  <para>
    <row xml:base="/home/didou/book.xml">
       <entry>The Grapes of Wrath</entry>
       <entry>John Steinbeck</entry>
       <entry>en</entry>
       <entry>0140186409</entry>
      </row>
    <row xml:base="/home/didou/book.xml">
       <entry>The Pearl</entry>
       <entry>John Steinbeck</entry>
       <entry>en</entry>
       <entry>014017737X</entry>
      </row>
    <row xml:base="/home/didou/book.xml">
       <entry>Samarcande</entry>
       <entry>Amine Maalouf</entry>
       <entry>fr</entry>
       <entry>2253051209</entry>
      </row>
  </para>
</chapter>

Коментарии

If you use the loadXML() method instead of the load() one (let's say, to process the XML string before loading and parsing it), you will have problems with xinclude(), because the parser will not know where to find the files to include.
Using chdir() before xinclude() will not help.

The solution is to set the documentURI property of the DOMDocument object accordingly to it's original filename, and everything will work fine !

<?php

$xml 
file_get_contents($file);
$xml do_something_with($xml);

$doc = new DOMDocument;
$doc->documentURI $file;
$doc->loadXML($xml);
$doc->xinclude();

?>
2007-07-12 07:56:14
http://php5.kiev.ua/manual/ru/domdocument.xinclude.html

    Поддержать сайт на родительском проекте КГБ