Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Bobr Автор Сообщений: 1790 Откуда: Глухов Дата регистрации: 21.11.2006 |
Всем доброго времени суток!
Эпопея с ПриветБанком продолжается. Итак, вот XMLина из их примеров:
при попытке втянуть в XMLAdapter.loadXML этое все как есть - получаю ошибку об отсутствии типа Payer в схеме www.w3.org(ну или что-то вроде того), потому кусок
я из него вырезаю, получая вот:
дальше следующий код код, вроде как, простее некуда, но увы - на выходе получаем пустые курсоры. от слова совсем. через вот так
может кто подсказать, ЧЯДНТ? |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Схему "http://debt.privatbank.ua/Transfer" не находит, вот он и ругается... Подсунь ему правильный xsd.
Вообще такая модификация XML некорректна. Кроме того, если уж избавляться от пространств имён, то кардинально - зачем оставил xmlns="http://debt.privatbank.ua/Transfer" в документе? Это задаёт пространство имён по умолчанию... ------------------ WBR, Igor |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Bobr Автор Сообщений: 1790 Откуда: Глухов Дата регистрации: 21.11.2006 |
можно на пальцах, как это правильно сделать? то есть, если убрать xmlns="http://debt.privatbank.ua/Transfer", и сделать:
ну, так а что не так? вроде ж пространство имен задано в корневом элементе, то есть для всего документа оно одинаково, как оно может негативно влиять? |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Bobr Автор Сообщений: 1790 Откуда: Глухов Дата регистрации: 21.11.2006 |
почитал здесь www.w3schools.com про XSD-схемы. все, в принципе, понятно. но блин, это мне на их XMLи еще и схемы ваять? неужели нет более easy way?
|
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Построчный разбор текстового файла (правда, на строки надо еще разбить XML иногда), с отслеживанием текущего, составного, тега
Штатным образом это называется как-то... щас посмотрю в ИЕ... SAX - типа на каждой строке (тэге) вызываем подпрограмму. Подпрограмме передаем полное составное имя тега, состоящее из собственно имени тэга, и имен в которые он входит, и собственно содержимое тэга конечно ) Доб. (я зарекался о XML не говорить, развязался зачем-то) Исправлено 1 раз(а). Последнее : of63, 20.01.17 20:59 |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Bobr Автор Сообщений: 1790 Откуда: Глухов Дата регистрации: 21.11.2006 |
2 of63
OMG, лучше уж я схемы для каждого из 8 случаев сделаю... |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
Есть. Попросить их у авторов. ------------------ Лень - это неосознанная мудрость. |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Схемы, как правило, предоставляет тот же кто и работает потом с этими XML-ями. По сути схема это формальное описание того как именно должен выглядеть XML. Что, где, какие обязательные элементы, какие нет...
Если заморачиваться "ручным" созданием всех этих XMLTable да XMLField-ов, и забить на валидацию XML-я, то сама по себе xsd схема и не нужна. Например для приведенного документа вот такой код работает: Для извлечения данных из собственно корневого элемента приходится немного трюкачить... Ну и атрибут вынуть с "чужим" пространством имён тоже нельзя напрямую (это уже ограничение фокса - не позволяет он для поля задавать нэймспейс отличный от такового у самой таблицы)... ------------------ WBR, Igor Исправлено 1 раз(а). Последнее : Igor Korolyov, 21.01.17 14:00 |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Bobr Автор Сообщений: 1790 Откуда: Глухов Дата регистрации: 21.11.2006 |
2 ssa
сомневаюсь я, что в таком энтырпрайзе, как ПриветБанк, кто-то хоть пальцем пошевелит для того, чтобы какому-то неизвестному мне искать какие-то там схемы(если они вообще есть) для XMLьного АПИ 2 Igor Korolyov Честно говоря, работа с XMLAdapter меня порой удивляет до глубины души: когда думаешь, что уже вот со всем разобрался - тут на тебе, видишь, что нихрена и не разобрался особо. Итак, поехали: зачем XMLAdapter'у назначать XMLName
так ли критично для моего документа указывать
почему для элемента Transfer нужно указыать, что он - XMLNAMEISXPATH?
штоэта? для чего все эти звездочки-собачки-скобочки?
почему элемент Type тоже должен быть XMLNAMEISXPATH? нужно ли вырезать вот это
|
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
Вы опять демонстрируете очень плохое знание предмета... ------------------ Лень - это неосознанная мудрость. |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Необязательно на самом деле, фокс весьма своеобразно "разбирает" XML... Но по сути именно таково имя корневого элемента в этом документе. Да, критично. Потому что он у некоторых элементов документа ЕСТЬ. А не укажешь - фокс будет искать элементы с пустым нэймспейсом, и ничего не найдёт. Потому что в его XMLName указан именно XPath, а не "имя узла". Не знаю как по другому достучаться до КОРНЕВОГО узла в дереве - при указании просто имени фокс ищет только внутренние узлы. Ну тут я читать курс по XPath точно не стану... И свойство опять же говорит что в XMLName находится XPath выражение, а не банальное "имя узла или атрибута". Данное выражение выбирает атрибут текущего узла у которого "локальное имя" (имя без нэймспейса) совпадает с заданной строкой. Нет, именно поэтому данный атрибут вынимается таким XPath выражением - чтобы проигнорировать пространство имён "http://www.w3.org/2001/XMLSchema-instance" заданное для этого атрибута - т.к. фокс не сможет напрямую достать данные из узла с одним нэймспейсом но атрибута с другим. Всё дело в том, что модифицировать xml "как просто текст" это последнее дело - запросто можно накосячить, т.к. семантически такой-же документ может запросто прийти в синтаксически другой форме - ну банально не пробел будет между атрибутами xmlns:xsi и xsi:type а перевод строки, и/или табуляторы, или появится ещё атрибут "между" этими двумя... Твой код не сработает, хотя по сути в документе "ничего и не изменилось". ------------------ WBR, Igor |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Bobr Автор Сообщений: 1790 Откуда: Глухов Дата регистрации: 21.11.2006 |
Решил попробовать "единичные" значения, типа action="Presearch" и type="Payer" доставать с помощью
следующий код, правда, возвращает корневую ноду Transfer
любое из нижеследующих выражений возвращает NULL
а вот это, выражение, внезапно, возвращает то, что нужно
а это так же внезапно возвращает коренную ноду, хотя должен быть, по идее, массив "детей"
я опять что-то не так готовлю? |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Опять забыли напрочь про пространства имён...
------------------ WBR, Igor |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Bobr Автор Сообщений: 1790 Откуда: Глухов Дата регистрации: 21.11.2006 |
ээмммм? недопонял... ну, загружаю я XML вашим же способом
а дальше
что же я делаю не так? |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
XMLNAMESPACE свойство адаптера, с чего бы это ему влиять на DOMDocument который этот адаптер ИСПОЛЬЗУЕТ (да ещё и до того как он реально начнёт его использовать для "разбора")? DomDocument и адаптер это 2 разные вещи.
Если стоит задача работать с DomDocument, то я бы вообще не стал использовать XMLAdapter. Как задать SelectionNamespaces (на самом деле ещё и SelectionLanguage) для DomDocument можно найти в поиске. Как повлияет это задание для объекта связанного с XMLAdapter я не в курсе - может он сломается, может просто "перепишет" эти свойства при выполнении последующих ToCursor()... В общем ещё раз отмечу - если предполагается разбирать XML вручную, не используя XMLTable.ToCursor(), то и грузить XML в адаптер не нужно - грузи его прямо в MSXML2.DomDocument. ------------------ WBR, Igor |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Bobr Автор Сообщений: 1790 Откуда: Глухов Дата регистрации: 21.11.2006 |
уже нашел и пытался прикрутить к IXMLDOMElement адаптера, так как мне почему-то думалось, что это и есть "завуалированно" созданный MSXML2.DomDocument, а не и что адаптер устанавливает свойства и для IXMLDOMElement'a... никак. метод setProperty() "появляется" только у нод, но при попытке записать SelectionNamespaces или SelectionLanguage - вываливает ошибку Not Implemented(ну еще бы - зачем оно ноде?), а у IXMLDOMElement такого метода нету, хотя у MSXML2.DomDocument он есть. видать действительно, лучше эти "одиночности" буду доставать через MSXML2.DomDocument, а бОльшие табличные массивы буду разбирать адаптером. спасибо за пинок в нужном направлении |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Это и есть созданный внутри адаптера DomDocument - только не он сам, а его documentElement (по сути корневой элемент). Из ссылки на такой объект в свойстве IXMLDOMElement адаптера через свойство .ownerDocument можно получить ссылку и на "подлежащий" объект DomDocument. Только дело в том, что этим объектом управляет сам адаптер, и потому не стоит в него лезть без особой нужды, и, тем паче, не понимая как и что изменится от нашего вмешательства... Методы getProperty/setProperty имеются в интерфейсах IXMLDOMDocument2 и IXMLDOMDocument3 - эти интерфейсы реализует класс DOMDocumentXX (в разных версиях парсера разные "имена" класса, и они реализуют разные интерфейсы. В 6-м парсере это IXMLDOMDocument3, в 3-м IXMLDOMDocument2 - но в данном случае это не имеет значения). Естественно что "элемент" и "документ" это разные классы, и у "элемента" нет этих методов, и нет возможности управлять глобальным поведением объекта "документ". От элемента перейти к объекту документ (из которого получен этот элемент) обычно можно через свойство ownerDocument. ------------------ WBR, Igor |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
makar12 Сообщений: 1 Откуда: Москва Дата регистрации: 01.02.2017 |
2 Bobr, неужели нет более easy way?
Делал что то похожее 2 года назад. Два дня искал "easy way" ,не нашёл, и написал свой парсер, который работает до сих пор. НО, совсем недавно наткнулся на "nfXML" vfpx.codeplex.com Интересные примеры,и не только для XML. В твоём случае это будет выглядеть так: *========================================== clear cMap = '' m.cXml= 'PrivetBank.xml' m.oXml = nfXmlRead( m.cXml,.F.,.F.,@cMap ) For Each unit In m.oXml.transfer.data.unit ? unit._attr_.name,unit._attr_.value EndFor ? cMap = '' *========================================== На последнюю строчку ставишь точку прерывания, а в дебагер выводишь объект "m.oXml" Всё как на ладони ... |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Bobr Автор Сообщений: 1790 Откуда: Глухов Дата регистрации: 21.11.2006 |
2 makar12
спасибо огромное за наводку - скачал, положил в "копилку" а свое я уже на питоне реализовал. осталось только "в кучку" собрать, да только внезапно другими "срочными задачами неимоверной важности" меня пригрузили... |
Re: Требуется помощь с XML и его разбором в XMLAdapter'e | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Ну этот то автор хотя-бы в основу положил стандартный MSXML парсер (правда древней 3-й версии)... Не гениальничал с FREAD() или STREXTRACT() как некоторые
А так - IMHO весьма сомнительная польза от данной обёртки. Как раз таки ПРОЩЕ и логичнее самому с DOM представлением работать, и через Select* методы получать то что нужно не прибегая ни к полным путям, ни к созданию кучи ненужных empty объектов (при том что сам по себе DOM парсер уже насоздавал кучу объектов для каждого узла и каждого атрибута в разобранном XML-е - посему он не лучший вариант для работы с мегабайтными XML-ями), ещё и с неизвестно какими именами, т.к. автор похоже вообще не в курсе что такое пространства имён и чем они отличаются от префиксов ------------------ WBR, Igor |
© 2000-2024 Fox Club  |