@antonowano
Профессиональный самоучка

Как проверить XML файл с помощью XMLReader?

Вот частичка кода:
$URI = /* Ссылка на XML или архив */;
$document = new \XMLReader;

if (/* Если передан архив */) {
   $xml = /* Абра-кадабра */;
} else {
   $xml = $URI;
}

if ( ! $document->open($xml)) {
    throw new XmlException('Ошибка про попытке прочитать файл ' . $URI);
}


Вроде всё ясно. НО, если указать $URI обычной html-страницы выражение $document->open($xml) всё равно возвращает true.
Как проверить является ли документ XML?
  • Вопрос задан
  • 211 просмотров
Решения вопроса 1
@antonowano Автор вопроса
Профессиональный самоучка
Пробовал использовать XSD схему, но тоже при всех попытках получал true.
Поэтому решил вопрос скачиванием архива на сервер и параллельно проверкой его на правильность.
private function upload($uri, $temp)
{
    if (preg_match('/[^\/]+(.(gz)|(bz2))$/i', $uri, $match)) {
        $compress = array(
            '.gz' => 'compress.zlib://',
            '.bz2' => 'compress.bzip2://'
        );
        $source = $compress[ $match[1] ] . $uri;
    } else {
        $source = $uri;
    }

    $hR = fopen($source, "r");
    $hW = fopen($temp, "w");
    $part = 0;

    while ( ! feof($hR)) {
        $str = fread($hR, 1024);

        if ($part == 0 && stripos($str, '<?xml') === false) {
            throw new \Exception('Передаваемый файл не XML.');
        }

        fwrite($hW, $str, strlen($str));
        $part++;
    }

    fclose($hW);
    fclose($hR);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы