Пример Структуры Элемента XML

Первый пример отображает структуру начальных элементов в документе с отступом.

Пример #1 Показать структуру элемента 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(
"Невозможно произвести чтение XML");
}

while (
$data fread($fp4096)) {
    if (!
xml_parse($xml_parser$datafeof($fp))) {
        die(
sprintf("Ошибка XML: %s на строке %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

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