Services webmasters
Partenaires
Jeux concours gratuits
 
Transtypage XML -> HTML
<<<
Entité externe Analyseur syntaxique XML
>>>

7.109.11 Exemples
7.109 Analyseur syntaxique XML
7 Index des fonctions
 Manuel PHP

Exemple de structure XML
Transtypage XML -> HTML
->Entité externe

7.109.11.3 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 ).

Entité externe

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

function
trustedFile($file) {
    
// only trust local files owned by ourselves
    
if (!eregi("^([a-z]+)://", $file)
        &&
fileowner($file) == getmyuid()) {
            return
true;
    }
    return
false;
}

function
startElement($parser, $name, $attribs) {
    print
"<<font color=\"#0000cc\">$name</font>";
    if (
sizeof($attribs)) {
        while (list(
$k, $v) = each($attribs)) {
            print
" <font color=\"#009900\">$k</font>=\"<font
                   color=
\"#990000\">$v</font>\"";
        }
    }
    print
">";
}

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

function
characterData($parser, $data) {
    print
"&l        global $parser_file;
            
// If the parsed document is "trusted", we say it is safe
            // to execute PHP code inside it.  If not, display the code
            // instead.
            
if (trustedFile($parser_file[$parser])) {
                eval(
$data);
            } else {
                
printf("Untrusted PHP code: <i>%s</i>",
                        
htmlspecialchars($data));
            }
            break;
    }
}

function
defaultHandler($parser, $data) {
    if (
substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
        
printf('<font color="#aa00aa">%s</font>',
                
htmlspecialchars($data));
    } else {
        
printf('<font size="-1">%s</font>',
                
htmlspecialchars($data));
    }
}

function
externalEntityRefHandler($parser, $openEntityNames, ) = new_xml_parser($systemId)) {
            
printf("Could not open entity %s at %s\n", $openEntityNames,
                   
$systemId);
            return
false;
        }
        while (
$data = fread($fp, 4096)) {
            if (!
xml_parse($parser, $data, feof($fp))) {
                
printf("erreur XML : %s à la ligne %d lors de l'analyse de l'entité %s\n",
                       
xml_error_string(xml_get_error_code($parser)),
                       
xml_get_current_line_number($parser), $openEntityNames);
                
xml_parser_free($parser);
                return
false;
            }
        }
        
xml_parser_free($parser);
        return
true;
    }
    return
false;
}

function
new_xml_parser($file) {
    global
$parser_file;

    
$xml_parser "startElement", "endElement");
    
xml_set_character_data_handler($xml_parser, "characterData");
    
xml_set_processing_instruction_handler($xml_parser, "PIHandler");
    
xml_set_default_handler($xml_parser, "defaultHandler");
    
xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");
    
    if (!(
$fp = @fopen($file, "r"))) {
        return
false;
    }
    if (!
is_array($parser_file)) {
        
settype($parser_file, "array");
    }
    
$parser_file[$xml_parser] = $file;
    return array(
$xml_parser, $fp);
}

if (!(list(
$xml_parser, $fp) = new_xml_parser($file))) {
    die(
"Impossible d'ouvrir le fichier XML");
}

print
"<pre>";
while (
$data = fread($fp, 4096)) {
    if (!
xml_parse($xml_parser, $data, feof($fp))) {
        die(
sprintf("Erreur XML : %s à la ligne %d\n",
       color="#007700">;
print
"parse complete\n";
xml_parser_free($xml_parser);

?>

xmltest.xml

<chapter>
<TITLE>Title </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>

<section id="about">
  <title>About this Document</title>
  <para>
   
   <?php print 'Salut! Ceci est PHP version '.phpversion(); ?>
  </para>
</section>
</chapter>

Ce fichier est inclus depuis xmltest.xml :
xmltest2.xml

<foo>
   <element attrib="value"/>
   
   <?php print "Ceci est du code PHP qui est exécuté."; ?>
</foo>

<< Entité externe >>
Transtypage XML -> HTML Exemples Analyseur syntaxique XML
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -