Для моего файла составил схему, проверил на валидность - все ок, работает, но есть одно Но...
Отрывок из схемы :
<xs:element type="xs:string" name="model"/>
<xs:element type="xs:string" name="mainImage" default="noimage"/>
<xs:element type="xs:byte" name="step_count" fixed="0" />
<xs:element type="xs:string" name="producer" />
Отрывок из xml:
<model>ПЭУ 003 Указательная стрелка (200х200) РС-M //комплект, 2шт.// MIZAR SI</model>
<mainImage>https://www.tesli.com/upload/iblock/7ff/93b8cf4d_6e69_11e5_8733_0cc47a13d3da.jpg</mainImage>
<step_count>1</step_count>
<producer>Световые технологии</producer>
<vendorCode>2501002550</vendorCode>
<series>ПЭУ</series>
ИЛИ
<model>ПЭУ 003 Указательная стрелка (200х200) РС-M //комплект, 2шт.// MIZAR SI</model>
<step_count>1</step_count>
<vendorCode>2501002550</vendorCode>
<series>ПЭУ</series>
Как видите любой (кроме model) элемент схемы может отсутствовать, что отрицательно сказывается на чтении XML (При чтении в отсутствующим элементе находится пустой объект)
Да, есть возможность проверить через объект ОбъектXDTO.Свойства присутствуют ли все свойства (кроме model) в объекте списка, НО это ужасно тормозит процесс чтения. Триста тысяч записей = больше миллиона проверок. В замере производительности проверки далеко обгоняют все остальные методы...
Вопрос возможно ли в схеме XSD как то задать "Значение по умолчанию" для элемента даже если его нет в строке последовательности?
Или есть более изящный метод избавится от такого количества проверок ?
(2)Добрый день, спасибо за ответ попробую, когда в след. раз придется разбирать сложную схему. Пока нашел неочевидное решение:
Создавать фабрику XDTO без схемы XSD и при чтении заполнять не структуру конструкцией
Если Объект.Получить(Объект.Свойства().ИскомоеСвойство) <> Неопределено Тогда ...
А заполнять ТЗ имеющую колонки с нужными мне свойствами, в начале цикла заполнять строку тч стандартными значениями свойств, а затем
ЗаполнитьЗначенияСвойств(СтрокаТЗ,Объект)
.
Неочевидно, но по замеру производительности такой способ отрабатывает в 2 раза быстрее...
(2)Добрый день, спасибо за ответ попробую, когда в след. раз придется разбирать сложную схему. Пока нашел неочевидное решение:
Создавать фабрику XDTO без схемы XSD и при чтении заполнять не структуру конструкцией
Если Объект.Получить(Объект.Свойства().ИскомоеСвойство) <> Неопределено Тогда ...
А заполнять ТЗ имеющую колонки с нужными мне свойствами, в начале цикла заполнять строку тч стандартными значениями свойств, а затем
ЗаполнитьЗначенияСвойств(СтрокаТЗ,Объект)
.
Неочевидно, но по замеру производительности такой способ отрабатывает в 2 раза быстрее...