Entité externe

Cet exemple exploite les références externes de XML : il est possible d'utiliser un gestionnaire d'entité externe pour inclure et analyser les documents, tous comme les instructions exécutables peuvent servir à inclure et analyser d'autres documents, et aussi fournir une indication de confiance (voir plus bas).

Le document XML qui est utilisé dans cet exemple est fourni plus loin dans l'exemple (xmltest.xml et xmltest2.xml).

Exemple #1 Entité externe

<?php
$file
= "xmltest.xml";

function
trustedFile($file)
{
// faites seulement confiance aux fichiers locaux dont vous êtes le propriétaire
if (!preg_match("@^([a-z][a-z0-9+.-]*)\:\/\/@i", $file)
&&
fileowner($file) == getmyuid()) {
return
true;
}
return
false;
}

function
startElement($parser, $name, $attribs)
{
echo
"&lt;<font color=\"#0000cc\">$name</font>";
if (
count($attribs)) {
foreach (
$attribs as $k => $v) {
echo
" <font color=\"#009900\">$k</font>=\"<font
color=\"#990000\">
$v</font>\"";
}
}
echo
"&gt;";
}

function
endElement($parser, $name)
{
echo
"&lt;/<font color=\"#0000cc\">$name</font>&gt;";
}

function
characterData($parser, $data)
{
echo
"<b>$data</b>";
}

function
PIHandler($parser, $target, $data)
{
switch (
strtolower($target)) {
case
"php":
global
$parser_file;
// si le document analysé est de confiance, nous déclarons qu'il est sûr

Exemple #2 xmltest.xml

<?xml version='1.0'?> <!DOCTYPE chapter SYSTEM "/just/a/test.dtd" [ <!ENTITY plainEntity "FOO entity"> <!ENTITY systemEntity SYSTEM "xmltest2.xml"> ]> <chapter> <TITLE>Title &plainEntity;</TITLE> <para> <informaltable> <tgroup cols="3"> <tbody> <row><entry>a1</entry><entry morerows="1">b1</entry><entry>c1</entry></row> <row><entry>a2</entry><entry>c2</entry></row> <row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row> </tbody> </tgroup> </informaltable> </para> &systemEntity; <section id="about"> <title>About this Document</title> <para> <!-- this is a comment --> <?php echo 'Hi! This is PHP version ' . phpversion(); ?> </para> </section> </chapter>

Ce fichier est inclus depuis xmltest.xml :

Exemple #3 xmltest2.xml

<?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY testEnt "test entity"> ]> <foo> <element attrib="value"/> &testEnt; <?php echo "Ceci est du code PHP qui est exécuté."; ?> </foo>
To Top