XML Adapter и две схемы XSD | |
---|---|
valshebniksta Сообщений: 5 Дата регистрации: 06.07.2017 |
Коллеги, есть две схемы XSD
В одной схеме описаны типы данных (data_types.xsd), в другой (FSFM550P.XSD) соответственно - сама структура XML И указано в схеме FSFM550P.XS - что <xs:include schemaLocation="data_types.xsd"/> Не подскажите, есть ли возможность загружать XMLAdapterom эти две схемы и обрабатывать входной XML файлик? |
Re: XML Adapter и две схемы XSD | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
И почему решили, что надо грузить обе схемы?
------------------ Лень - это неосознанная мудрость. |
Re: XML Adapter и две схемы XSD | |
---|---|
valshebniksta Сообщений: 5 Дата регистрации: 06.07.2017 |
потому что в схеме FSFM550P.XSD нет типов данных.
Все в другой схеме: data_types.xsd И когда грузишь FSFM550P.XSD - то пи попытке обработать файл XML получаешь ошибку: xml schema is too complex К примеру в FSFM550P.XSD: <xs:element name="НомерЗаписи" type="ИдентификаторЗаписи"> а вот ИдентификаторЗаписи - опиание лежит уже в data_types.xsd <xs:simpleType name="ИдентификаторЗаписи"> <xs:annotation> <xs:documentation>Указывается уникальный идентификатор записи сведений, представляемых организацией (филиалом организации)</xs:documentation> </xs:annotation> <xs:restriction base="xs:string"> <xs:pattern value="([0-9]{4}_[0-9]{3}_(01|02|11)_[0-9a-zA-Z]{16})"/> </xs:restriction> </xs:simpleType> |
Re: XML Adapter и две схемы XSD | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
А адаптеру нужны только они. Схема документа ему по барабану, он не занимается валидацией документов. ------------------ Лень - это неосознанная мудрость. |
Re: XML Adapter и две схемы XSD | |
---|---|
valshebniksta Сообщений: 5 Дата регистрации: 06.07.2017 |
Гм.
Несколько неправильно описал: часть типов данных лежит в основной схеме, а часть в схеме с типами И получается: если подсовываешь data_types.xsd - то ошибки нет. Но нет и результат - ничего в курсор не заталкивает: xa = CREATEOBJECT("XMLAdapter") xa.UseCodePage = .t. xa.XMLSchemaLocation = "C:\VFP\TFile\XSD\data_types.xsd" xa.LoadXML("C:\VFP\TFile\InBox\CB_ES550P_20170626_001.xml",.t.) ? xa.Tables.Count && равен нулю |
Re: XML Adapter и две схемы XSD | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
Так как FSFM550P.XSD содержит <xs:include schemaLocation="data_types.xsd"/>, то грузятся таки оба файла. Но результат изменить навряд ли удастся ибо адаптер действительно не рассчитан на сильно разветвленные схемы. ------------------ Лень - это неосознанная мудрость. |
Re: XML Adapter и две схемы XSD | |
---|---|
valshebniksta Сообщений: 5 Дата регистрации: 06.07.2017 |
Было такое подозрение - надо теперь думать на чем можно распарсить
|
Re: XML Adapter и две схемы XSD | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
Надо хорошенько посмотреть обе схемы и попробовать их скрестить и упростить, по возможности убрав лишние типы и заменив их простыми типами.
------------------ Лень - это неосознанная мудрость. |
Re: XML Adapter и две схемы XSD | |
---|---|
valshebniksta Сообщений: 5 Дата регистрации: 06.07.2017 |
Да, есть такая мысль. Почему не стал их вместе соединять: чтобы в случае изменения подложи новый файл и все... минимум движений
Читаю на сайте Microsoft - Включение или импорт XML-схем (https://msdn.microsoft.com/ru-ru/library/ms256237(v=vs.100).aspx) Пример кода на VB (c использованием XmlSchemaSet) schemaSet.Add("http://www.tempuri.org", "customer.xsd") schemaSet.Add("http://www.example.com/IPO", "address.xsd") schemaSet.Compile() Попробую собрать на VFP |
Re: XML Adapter и две схемы XSD | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Ты получишь ту же ошибку даже "слепив" оба файла в один. XMLAdapter не понимает "произвольные" схемы. Он достаточно прост и прямолинеен. Я бы даже сказал что он понимает ТОЛЬКО определённые схемы (их несколько видов - и все они весьма просты). Если чтоит задача принимать данные из достаточно сложных XML структур то я бы предложил (если без фокса ну совсем уж "никуда") использовать xslt трансформацию для "перевода" сложностей исходных данных в простой и понятный фоксу вид. При том в принципе то можно и схемы таким образом обрабатывать (xsd это тоже xml), но в таком подходе это вряд ли понадобится - под "новый вид" (после трансформации) схема будет скорее всего статичная - и меняться она будет лишь вместе с изменением трансформации. Альтернатива - вообще забить на схемы и на XMLAdapter и ручками, долго и печально через парсер MSXML2.DomDocument вынимать (в циклах, вероятно с XPath запросами нужных наборов узлов, чтобы не совсем уж "по тупому") данные их этих документов... ------------------ WBR, Igor |
© 2000-2024 Fox Club  |