downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Transtypage XML -> HTML> <Exemples
Last updated: Fri, 14 Aug 2009

view this page in

Exemple de structure XML

Ce premier exemple affiche la structure de l'élément de début dans un document avec indentation.

Exemple #1 Afficher une structure XML

<?php
$file 
"data.xml";
$depth = array();

function 
startElement($parser$name$attrs
{
    global 
$depth;
    for (
$i 0$i $depth[$parser]; $i++) {
        echo 
"  ";
    }
    echo 
"$name\n";
    
$depth[$parser]++;
}

function 
endElement($parser$name
{
    global 
$depth;
    
$depth[$parser]--;
}

$xml_parser xml_parser_create();
xml_set_element_handler($xml_parser"startElement""endElement");
if (!(
$fp fopen($file"r"))) {
    die(
"could not open XML input");
}

while (
$data fread($fp4096)) {
    if (!
xml_parse($xml_parser$datafeof($fp))) {
        die(
sprintf("XML error: %s at line %d",
                    
xml_error_string(xml_get_error_code($xml_parser)),
                    
xml_get_current_line_number($xml_parser)));
    }
}
xml_parser_free($xml_parser);
?>



add a note add a note User Contributed Notes
Exemple de structure XML
roan at horning dot us
31-Oct-2009 05:07
The following example will echo back an xml file using the basic event based parser.  Currently, (at least in the version of PHP5 I'm using) it will skip The XML declaration and the Doctype declaration--they don't seem to be captured by the default handler.

<?php
echo "<pre>";

$file = "test.xml";
echo
$file."\n";
global
$inTag;

$inTag = "";
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($xml_parser, XML_OPTION_SKIP_WHITE, 1);
xml_set_processing_instruction_handler($xml_parser, "pi_handler");
xml_set_default_handler($xml_parser, "parseDEFAULT");
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "contents");

if (!(
$fp = fopen($file, "r"))) {
    if (!
xml_parse($xml_parser, $data, feof($fp))) {
       die(
sprintf("XML error: %s at line %d",
                           
xml_error_string(xml_get_error_code($xml_parser)),
                           
xml_get_current_line_number($xml_parser)));
    }
}
while (
$data = fread($fp, 4096)) {
    if (!
xml_parse($xml_parser, $data, feof($fp))) {
       die(
sprintf("XML error: %s at line %d",
                           
xml_error_string(xml_get_error_code($xml_parser)),
                           
xml_get_current_line_number($xml_parser)));
    }
}
xml_parser_free($xml_parser);

function
startElement($parser, $name, $attrs) {

    global
$inTag;
    global
$depth;
       
   
$padTag = str_repeat(str_pad(" ", 3), $depth);

    if (!(
$inTag == "")) {
        echo
"&gt;";
    }
    echo
"\n$padTag&lt;$name";
    foreach (
$attrs as $key => $value) {
        echo
"\n$padTag".str_pad(" ", 3);
        echo
" $key=\"$value\"";
    }
   
$inTag = $name;
   
$depth++;
}

function
endElement($parser, $name) {

    global
$depth;
   global
$inTag;
    global
$closeTag;
       
   
$depth--;

   if (
$closeTag == TRUE) {
       echo
"&lt/$name&gt;";
      
$inTag = "";
   } elseif (
$inTag == $name) {
       echo
" /&gt;";
      
$inTag = "";
   } else {
        
$padTag = str_repeat(str_pad(" ", 3), $depth);
       echo
"\n$padTag&lt/$name&gt;";
    } 
}
 
function
contents($parser, $data) {

    global
$closeTag;
   
   
$data = preg_replace("/^\s+/", "", $data);
   
$data = preg_replace("/\s+$/", "", $data);

    if (!(
$data == ""))  {
        echo
"&gt;$data";
       
$closeTag = TRUE;
    } else {
       
$closeTag = FALSE;
     }
}

function
parseDEFAULT($parser, $data) {
   
   
$data = preg_replace("/</", "&lt;", $data);
   
$data = preg_replace("/>/", "&gt;", $data);
    echo
$data;
}

function
pi_handler($parser, $target, $data) {

    echo
"&lt;?$target $data?&gt;\n";
}
echo
"</pre>";
?>

Transtypage XML -> HTML> <Exemples
Last updated: Fri, 14 Aug 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites