PHP XMLReader натыкается на недопустимый символ и останавливается - PullRequest
1 голос
/ 15 февраля 2012

Как следует из названия.

Я обрабатываю большие загруженные файлы XML на лету.Некоторые из этих файлов содержат недопустимые символы, такие как «US» или «VB» (вертикальная вкладка).Понятия не имею, почему эти персонажи существуют с самого начала.Я ничего не могу с ними поделать.

$z = new XMLReader;
$z->open('compress.zlib://'.$file, "UTF-8");
while ($z->read() && $z->name !== 'p');
while ($z->name === 'p'){

try
{
    $node = new SimpleXMLElement($z->readOuterXML());
}catch(Exception $e)
{
    echo $e->getMessage();
}
// And so on
}

Я получаю сообщение об ошибке "Строка не может быть проанализирована как XML".

Что я могу сделать здесь?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012

Закончилось все-таки поиском решения.

Я решил использовать fopen для создания и обработки на лету. Вот что я закончил:

$handle = fopen('compress.zlib://'.$file, 'r');
$xml_source = '';
$record = false;
if($handle){
    while(($buffer = fgets($handle, 4096)) !== false){
        if(strpos($buffer, '<open_tag>') > -1){
            $xml_source = '<?xml version="1.0" encoding="UTF-8"?>';
            $record = true;
        }
        if(strpos($buffer, '</close_tag') > -1){
            $xml_source .= $buffer;
            $record = false;
            $xml = simplexml_load_string(stripInvalidXml($xml_source));

            // ... do stuff here with the xml element

        }
        if($record){
            $xml_source .= $buffer;
        }

    }
}

Функция simplexml_load_string () - это единственная предоставленная функция быстрой смены. Работает как шарм.

0 голосов
/ 15 февраля 2012

Попробуйте выполнить его через примерно так перед анализом с XMLReader.

...