#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:
Глядя на код, похоже, есть несколько синтаксических ошибок. Сначала исправьте следующие ошибки, а затем сообщите нам, если проблема не устранена:
- В конце строки
printf('$data[%d][%d][%d] = %d;<br>', $i1,$i2,$i3,$n3);?>
есть закрывающий PHP-тег. (смотрите?>
.) - Я не уверен, что цикл ‘foreach’ правильно расположен там, где вы его разместили. Я несколько раз проверил фигурные скобки (
{
,}
), чтобы убедиться, что я прав. Похоже, чтоforeach
функция не содержится внутри функции. Похоже, что он все еще находится внутри класса, что еще хуже..
Я предлагаю поместить оператор ‘foreach’ после удаления символов ?> после команды ‘ $xml_parser->parse($data);
‘. (Обязательно отредактируйте его, чтобы $this
заменить на $xml_parser
.)
Я не проверял остальную часть вашего кода на наличие ошибок — я могу отредактировать / обновить этот ответ, если то, что я предложил, в настоящее время не устраняет вашу проблему или, по крайней мере, помогает вам выяснить, что еще не так. 🙂
Комментарии:
1. это работает. Но он по-прежнему не выдает мне дату в тегах.
2. Вы поняли это с тех пор, как я в последний раз оставлял свой комментарий? Если нет, пожалуйста, ответьте. :3