ConFoo 2025

DOMDocument::xinclude

(PHP 5, PHP 7, PHP 8)

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

Описание

public DOMDocument::xinclude(int $options = 0): int|false

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

Замечание:

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

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

options

Побитовое ИЛИ (OR) констант опций libxml.

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

Возвращает количество 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>

Добавить

Примечания пользователей 1 note

up
8
nicolas_rainardNOSPAM at yahoo dot fr
17 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