PHP 7.1.24 Released

DOMDocument::xinclude

(PHP 5, PHP 7)

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>

add a note add a note

User Contributed Notes 1 note

up
4
nicolas_rainardNOSPAM at yahoo dot fr
11 years ago
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();

?>
To Top