PHP 5.6.0RC3 is available

DOMDocument::xinclude

(PHP 5)

DOMDocument::xinclude Remplace les XIncludes dans un objet DOMDocument

Description

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

Cette méthode remplace les » XIncludes dans un objet DOMDocument.

Note:

Vu que la bibliothèque libxml2 résout automatiquement les entités, cette méthode peut produire des résultats non attendus si le fichier XML inclus a une DTD d'attachée.

Liste de paramètres

options

paramètres Libxml. Disponible depuis PHP 5.1.0 et Libxml 2.6.7.

Valeurs de retour

Retourne le nombre de XIncludes du document, -1 si une erreur survient lors du processus, ou FALSE s'il n'y a aucune substitution.

Exemples

Exemple #1 Exemple avec DOMDocument::xinclude()

<?php

$xml 
= <<<EOD
<?xml version="1.0" ?>
<chapter xmlns:xi="http://www.w3.org/2001/XInclude">
 <title>Les livres d'une autre personne</title>
 <para>
  <xi:include href="book.xml">
   <xi:fallback>
    <error>xinclude: book.xml n'a pas été trouvé</error>
   </xi:fallback>
  </xi:include>
 </para>
</chapter>
EOD;

$dom = new DOMDocument;

// Nous voulons un joli affichage
$dom->preserveWhiteSpace false;
$dom->formatOutput true;

// chargement de la chaîne XML définie ci-dessus
$dom->loadXML($xml);

// remplacement des xincludes
$dom->xinclude();

echo 
$dom->saveXML();

?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

<?xml version="1.0"?>
<chapter xmlns:xi="http://www.w3.org/2001/XInclude">
  <title>Les livres d'une autre personne</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
1
nicolas_rainardNOSPAM at yahoo dot fr
7 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