PHP 8.4.0 Alpha 2 available for testing

DOMDocument::xinclude

(PHP 5, PHP 7, PHP 8)

DOMDocument::xinclude Substitui XIncludes em um objeto DOMDocument

Descrição

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

Este método substitui » XIncludes em um objeto DOMDocument.

Nota:

Devido ao libxml2 resolver automaticamente entidades, este método produzirá resultados inesperados se o arquivo XML incluído tiver um DTD anexado.

Valor Retornado

Retorna o número de XIncludes no documento, -1 se algum processamento falhar, ou false se não houver substituições.

Exemplos

Exemplo #1 DOMDocument::xinclude() exemplo

<?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;

// vamos ter uma saída bonita
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;

// carrega a string XML definida acima
$dom->loadXML($xml);

// substitui xincludes
$dom->xinclude();

echo
$dom->saveXML();

?>

O exemplo acima produzirá algo semelhante a:

<?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

User Contributed Notes 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