freshlime
Новичок
Использование SimpleXML с кодировкой Windows-1251 и итераторы
Здравствуйте.
Поскольку класс SimpleXML работает только c UTF-8 пытаюсь реализовать автоматическое преобразование выходных данных в кодировку windows. В SimleXML есть возможность использовать пользовательский класс для представления элементов XML. Для этого необходимо унаследовать его от SimpleXMLElement следующим образом:
В последствии этот класс нужно указать при загрузке XML и он бует использоваться вместо дефолтного SimpleXMLElement:
SimpleXMLElement как я понял использует итераторы для доступа к содержимому тегов и атрибутам. Например:
Основная проблема заключается в перегрузке операции вроде $xml->people->leg[0] и $xml->people['age'] в XMLNode. При попытке объявления XMLNode следующим образом:
получаю ошибку: Fatal error: Class XMLNode could not implement interface Iterator in Unknown on line 0
Может кто решал задачу пергрузки при наследовании классов-итераторов?
Здравствуйте.
Поскольку класс SimpleXML работает только c UTF-8 пытаюсь реализовать автоматическое преобразование выходных данных в кодировку windows. В SimleXML есть возможность использовать пользовательский класс для представления элементов XML. Для этого необходимо унаследовать его от SimpleXMLElement следующим образом:
PHP:
class XMLNode extends SimpleXMLElement
{
public static $_encoding = 'windows-1251';
public function addAttribute($name, $value)
{
parent::addAttribute($name, XML::ToUnicode($value, self::$_encoding));
}
public function addChild($name, $value)
{
return parent::addChild($name, XML::ToUnicode($value, self::$_encoding));
}
}
PHP:
simplexml_load_file($source, 'XMLNode');
PHP:
$data = '<?xml version="1.0" encoding="windows-1251" ?>
<people age="22">
<leg>Первая</leg>
<leg>Вторая</leg>
</people>';
$xml = simplexml_load_string($data, 'XMLNode');
echo(Содержимое: '.$xml->people->leg[0]);
echo('Атрибут: '.$xml->people['age']);
PHP:
class XMLNode extends SimpleXMLElement implements Iterator
Может кто решал задачу пергрузки при наследовании классов-итераторов?