Эта тема на forum.dklab.ru


Anonymous: XML парсер не видит включенный файл
Добрый всем день.
Имеется XML, включающий в себя другой XML. При прогоне парсером, он не видит включенное содержимое.

Главный файл (site_structure.xml):
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE site_structure [
<!ENTITY user_structure SYSTEM "user_structure.xml">
]>
<structure id="0">
&user_structure;
<page id="1" name="404" />
<page id="2" name="helloworld" />
</structure>

Включенный файл (user_structure.xml):
<?xml version="1.0" encoding="windows-1251"?>
<structure>
<page id="100" name="contacts" />
<page id="200" name="about" />
</structure>

Скрипт на PHP5:
<?php
class sax
{ // Класс SAX-анализатора.
// Внутренние переменные.
private $deep = -2, $i = 0, $parser;
public function __construct()
{ // Создание парсера.
$this->parser = xml_parser_create();
// Установка обработчиков узла.
xml_set_element_handler($this->parser, array($this, 'startElement'), array($this, 'endElement'));
// Выключение case folding.
xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false);
}
public function startElement($parser, $name, $attrs)
{ // Обработчик события нахождения открывающего тега узла.
$this->deep++;
if ($name === 'page') echo str_repeat('===', $this->deep).' '.$attrs['name'].'<br>';
}
public function endElement($parser, $name)
{ // Обработчик события нахождения закрывающего тега узла.
$this->deep--;
}
public function __destruct()
{ // Уничтожение парсера, освобождение занятых им ресурсов.
xml_parser_free($this->parser);
}
public function parse()
{ // Запуск парсинга.
if (!xml_parse($this->parser, file_get_contents('site_structure.xml'), true))
die(sprintf('Ошибка XML: %s в строке %d', xml_error_string(xml_get_error_code($this->parser)), xml_get_current_line_number($this->parser)));
}
}

$sax = new sax;
$sax->parse();
?>

В DOM-модели все узлы отображаются прекрасно, а здесь только те, что были в главном файле... Что можете посоветовать? Заранее благодарен.

Эта тема на forum.dklab.ru