La méthode xinclude() indique à PHP de remplacer les déclarations d'inclusion XML par le contenu des fichiers qui leurs sont rattachés.
<?php
$fichier = 'societe';
$doc_xml = new DOMDocument();
if($doc_xml->load($fichier . '.xml')){
echo '<h3>Le document XML '
. $fichier .
' a été chargé !</h3>';
$doc_xml->xinclude();
echo '<pre>'
. str_replace('<', '<', $doc_xml->saveXML())
. '</pre>';
}
else
echo '<p style="color:red">Le document XML '
. $fichier .
' n\'a pu être chargé !</p>';
?>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Fichier : societe.xml -->
<societe xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="services.xml">
<xi:fallback>
<services>
<service id="id">
<designation/>
</service>
</services>
</xi:fallback>
</xi:include>
<xi:include href="divisions.xml">
<xi:fallback>
<divisions>
<division id="id" services="services"/>
</divisions>
</xi:fallback>
</xi:include>
<xi:include href="employes.xml">
<xi:fallback>
<employes>
<employe id="id" service="service">
<nom/>
<prenom/>
</employe>
</employes>
</xi:fallback>
</xi:include>
</societe>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Fichier : services.dtd -->
<services>
<service id="DG001">
<designation>Direction générale</designation>
</service>
<service id="ST001">
<designation>Service technique</designation>
</service>
<service id="SC001">
<designation>Service commercial</designation>
</service>
<service id="SC101">
<designation>Service clientèle</designation>
</service>
<service id="RH001">
<designation>Ressources humaines</designation>
</service>
<service id="SQ001">
<designation>Service qualité</designation>
</service>
<service id="SP001">
<designation>Service production</designation>
</service>
<service id="RD001">
<designation>Recherche et développement</designation>
</service>
</services>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Fichier : divisions.dtd -->
<divisions>
<division id="A001" services="DG001 RH001"/>
<division id="B001" services="SC001 SC101"/>
<division id="C001" services="SP001 SQ001 RD001"/>
</divisions>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Fichier : employes.dtd -->
<employes>
<employe id="RJ1002" service="DG001">
<nom>Robierre</nom>
<prenom>Jean</prenom>
</employe>
<employe id="LA1012" service="DG001">
<nom>Lardut</nom>
<prenom>Anne</prenom>
</employe>
<employe id="GA1013" service="ST001">
<nom>Guilde</nom>
<prenom>Angelique</prenom>
</employe>
<employe id="HP1022" service="SC001">
<nom>Henry</nom>
<prenom>Paul</prenom>
</employe>
<employe id="MM1045" service="RH001">
<nom>Mortier</nom>
<prenom>Marc</prenom>
</employe>
<employe id="LS1102" service="SQ001">
<nom>Lebreton</nom>
<prenom>Sophie</prenom>
</employe>
<employe id="JM1095" service="RD001">
<nom>Jolie</nom>
<prenom>Martine</prenom>
</employe>
<employe id="MT1036" service="SC101">
<nom>Marcelin</nom>
<prenom>Tania</prenom>
</employe>
<employe id="LL1029" service="SC101">
<nom>Leger</nom>
<prenom>Laurence</prenom>
</employe>
<employe id="DM1052" service="SC001">
<nom>Duroi</nom>
<prenom>Maxime</prenom>
</employe>
</employes>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Fichier : societe.dtd -->
<!ELEMENT designation (#PCDATA)>
<!ELEMENT division EMPTY>
<!ATTLIST division
id ID #REQUIRED
services IDREFS #REQUIRED
>
<!ELEMENT divisions (division+)>
<!ELEMENT employe (nom, prenom)>
<!ATTLIST employe
id ID #REQUIRED
service IDREF #REQUIRED
>
<!ELEMENT employes (employe+)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT service (designation)>
<!ATTLIST service id ID #REQUIRED>
<!ELEMENT services (service+)>
<!ELEMENT societe (services, divisions, employes)>
<!ATTLIST societe
xmlns:xi CDATA #FIXED "http://www.w3.org/2001/XInclude"
>