XML <-> XSD

psv

Новичок
XML <-> XSD

Привет всем, помогите пожалуйста с проверкой на валидность XML-файла (на php).

Сейчас существует обработка приема информации из XML-файлов (объемы где-то максимум до гигабайта) через XMLReader и DOM с подключение RNG схемы. Всё работает супер, пока не всречается первая ошибка по некорректности XML-структуры.

Структура XML такого вида:

PHP:
<?xml version="1.0" encoding="windows-1251"?>
<files version="2.0">
<info recnumber="1">
...
</info>

...

<info recnumber="n">
...
</info>
</files>


Проблематика в том, при возникновении ошибок, прием информации из файла останавливается (строит проверка на возврат валидности), а надо продолжать, убирать схему для проверки не хочется, т.к. многие ошибки вылавливаются именно по схеме.

Есть замысел сделать две схемы, одну облегченную, на весь файл, а вторую на блок info, чтобы если не коректен именно блок, то делать пропуск блока (без его принятия в систему) и идти дальше к другому блоку. Но не могу понять как реализовать програмную часть, т.е. поставить схему именно для проверки блока info. В инете ничего похожего не нашел, хотя может и плохо искал.

помогите какими-нибудь мыслями...
 

slach

Новичок
никак не реализовать

схема валидации предполагает именно валидацию ВСЕГО документа
а не конкретной его части

в DOM или SimpleXML можно было бы загрузить все в ПАМЯТЬ и отвалидировать ТАМ последовательно

но насчет чтого чтобы последовательно использовать нЕСКОЛЬКО схем валидации с XMLReader (потоковое чтение), на мой взгляд это невозможно

http://www.php.net/manual/en/function.xmlreader-setrelaxngschema.php

хотя прямых указаний в мануале которые говорят что setRelaxNGSchema нельзя использовать несколько РАЗ нет...
 

alekciy

Новичок
Re: XML <-> XSD

Автор оригинала: psv
чтобы если не коректен именно блок, то делать пропуск блока (без его принятия в систему) и идти дальше к другому блоку.
Ну и выреж динамически этот блок. Например получи новый XML без этого блока путем XSLT преобразования.
 
Сверху