Как распечатать массив, содержащий теги и данные в этом анализаторе xml?

#php #xml

#php #xml

Вопрос:

 <?php

class Simple_Parser 
{
    var $parser;
    var $error_code;
    var $error_string;
    var $current_line;
    var $current_column;
    var $data = array();
    var $datas = array();

    function parse($data)
    {
        $this->parser = xml_parser_create('UTF-8');
        xml_set_object($this->parser, $this);
        xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, 1);
      xml_set_element_handler($this->parser, 'tag_open', 'tag_close');

        xml_set_character_data_handler($this->parser, 'cdata');
        if (!xml_parse($this->parser, $data))
        {
            $this->data = array();
        $this->dat1 = array();
            $this->error_code = xml_get_error_code($this->parser);
            $this->error_string = xml_error_string($this->error_code);
            $this->current_line = xml_get_current_line_number($this->parser);
            $this->current_column = xml_get_current_column_number($this->parser);


        }
        else
        {
            $this->data = $this->data['child'];

        }
        xml_parser_free($this->parser);
    }

    function tag_open($parser, $tag, $attribs)
    {
        $this->data['child'][$tag][] = array('data' => '', 'attribs' => $attribs, 'child' => array());
        $this->datas[] =amp; $this->data;



        $this->data =amp; $this->data['child'][$tag][count($this->data['child'][$tag])-1];
    echo("");
}

    function cdata($parser, $cdata)
    {
        $this->data['data'] .= $cdata;


    echo "$cdata";
    }

    function tag_close($parser, $tag)
    {
        $this->data =amp; $this->datas[count($this->datas)-1];
    //echo "$this->datas[]";
        array_pop($this->datas);
    }

foreach ($this->data as $i1 => $n1)     
        foreach ($n1 as $i2 => $n2)            
            foreach ($n2 as $i3 => $n3)
                printf('$data[%d][%d][%d] = %d;<br>', $i1,$i2,$i3,$n3);?>
}
$file = "BLR_HOSP-1.kml";


if (!($fp = fopen($file, "r"))) {
    die("could not open XML input");
}
$data = fread($fp, filesize($file));
fclose($fp);

$xml_parser = new Simple_Parser;
$xml_parser->parse($data);



?>
  

Цикл foreach не сработал. Итак, как предоставить вывод XML-файла, который я проанализировал и который я сохранил в виде массива. Я хочу распечатать теги, а также данные в теге.

Ответ №1:

Глядя на код, похоже, есть несколько синтаксических ошибок. Сначала исправьте следующие ошибки, а затем сообщите нам, если проблема не устранена:

  1. В конце строки printf('$data[%d][%d][%d] = %d;<br>', $i1,$i2,$i3,$n3);?> есть закрывающий PHP-тег. (смотрите ?> .)
  2. Я не уверен, что цикл ‘foreach’ правильно расположен там, где вы его разместили. Я несколько раз проверил фигурные скобки ( { , } ), чтобы убедиться, что я прав. Похоже, что foreach функция не содержится внутри функции. Похоже, что он все еще находится внутри класса, что еще хуже..

Я предлагаю поместить оператор ‘foreach’ после удаления символов ?> после команды ‘ $xml_parser->parse($data); ‘. (Обязательно отредактируйте его, чтобы $this заменить на $xml_parser .)

Я не проверял остальную часть вашего кода на наличие ошибок — я могу отредактировать / обновить этот ответ, если то, что я предложил, в настоящее время не устраняет вашу проблему или, по крайней мере, помогает вам выяснить, что еще не так. 🙂

Комментарии:

1. это работает. Но он по-прежнему не выдает мне дату в тегах.

2. Вы поняли это с тех пор, как я в последний раз оставлял свой комментарий? Если нет, пожалуйста, ответьте. :3