XML Element Structure Example

This first example displays the structure of the start elements in a document with indentation.

Example #1 Show XML Element Structure

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

function 
startElement($parser$name$attrs)
{
    global 
$depth;

    if (!isset(
$depth[$parser])) {
        
$depth[$parser] = 0;
    }

    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);
?>

Коментарии

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_parserXML_OPTION_CASE_FOLDING0);
xml_parser_set_option($xml_parserXML_OPTION_SKIP_WHITE1);
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$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)));
    }
}
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);

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>";
?>
2009-10-30 23:07:03
http://php5.kiev.ua/manual/ru/example.xml-structure.html
<?php

public static function xml2array($element$arr = array())
    {
        if(
is_string($element))
        {
           
$element = (strlen($element) > && substr($element, -4) === '.xml'
                            ? 
simplexml_load_file(DATAPATH.$element)
                            : 
simplexml_load_string($element);
        }
         
$iter 0;
        foreach(
$element->children() as $b)
        {
           
$a $b->getName();
            if(!
$b->children()){
                   
$arr[$a] = trim($b[0]);
            }
            else{
                   
$arr[$a][$iter] = array();
                   
$arr[$a][$iter] = self::xml2array($b,$arr[$a][$iter]);
            }
               
$iter++;
        }
        return 
$arr;
    }
}

?>
2013-07-04 13:32:14
http://php5.kiev.ua/manual/ru/example.xml-structure.html
Автор:
If you use strict_types=1, you'll get the warning "Notice: Resource ID#... used as offset, casting to integer". 

Use

<?php $depth[(int) $parser?>

instead of

<?php $depth[$parser?>
2022-06-27 17:08:44
http://php5.kiev.ua/manual/ru/example.xml-structure.html

    Поддержать сайт на родительском проекте КГБ