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