
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
09.06.2006, 15:24
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
Please!! Объясните!! есть xml - файл есть к нему xsd - схема Как мне в vfp9 получить из этого файла несколько связанных таблиц, описанных в xsd схеме???? Или хотя бы один курсор, но ПРАВИЛЬНО созданный. Не две строчки и все данные в мемо-поле !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.06.2006, 01:55
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
Есть такая чудесная штука, которая называется XMLAdapter. Никогда не говори "невозможно", просто попробуй сделать иначе! JS (at FoxClub) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.06.2006, 09:01
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
Да знаю что есть. Мне бы примерчик?! Или ссылочку?! Именно для нескольких связанных таблиц! То что приведено в solution - для моего XML файла не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.06.2006, 09:29
|
|||
|---|---|---|---|
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
alex_lipДа знаю что есть. Мне бы примерчик?! Или ссылочку?! Именно для нескольких связанных таблиц! То что приведено в solution - для моего XML файла не работает. Если по английски читаете, то могу подкинуть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.06.2006, 09:46
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
В общем-то ваша задача решается достаточно просто. Условия: XML файл является "правильным" XML файлом. Для файла имеется схема (вложенная или внешняя). Если схема внешняя, заносим ее местонахождение в XMLSchemaLocation. При исполнении метода LoadXML схема будет прочитана и для каждой таблицы будет создан объект XMLTable. Обратиться к объекту можно через объект коллекции Tables. И далее исполняем метод ToCursor для каждого из объектов коллекции таблиц. Подготовлен, но не завершен цикл статей, по XMLAdapter'у и по работе с XML в целом. Скоро появится. Пока можно воспользоваться русским HELP по 9-ке, где практически все, что связано c XMLAdapter'ом переведено. Никогда не говори "невозможно", просто попробуй сделать иначе! JS (at FoxClub) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.06.2006, 12:26
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
если бы так просто... в одном случае fox пишет, что xml schema is too complex в другом случае schema is non-deterministic Оба случая XMLSPY открывает без проблем и говорит что файлы валидные. Oracle 9 тоже смог это понять, но я плохо понимаю Oracle 9 Ж:(( LOCAL oAdapter oAdapter = CREATEOBJECT('xmlAdapter') oAdapter.XMLSchemaLocation=SYS(5)+CURDIR()+'þð_ëèöà_ñõåìà.xsd' oAdapter.LoadXML('RUV.XML',.t.,.t.) *oAdapter.XMLSchemaLocation=SYS(5)+CURDIR()+'no_sz.xsd' *oAdapter.LoadXML('no.XML',.t.,.t.) oAdapter.Tables.Item(1).ToCursor() BROWSE RELEASE oA Все вываливается на строчке oAdapter.LoadXML ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.06.2006, 15:38
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
acces и то раскладывает структуру таблицы(правда без данных) а fox - никак ?!?!?!?!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.06.2006, 16:00
|
|||
|---|---|---|---|
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
Вы так и не просветили людей по поводу владения английским языком... Пример для Microsoft продуктов Happy reading! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.06.2006, 13:03
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
==Вы так и не просветили людей по поводу владения английским языком...== Уважаемый Sergey Ch! Английский технический - это необходимое(но не достаточное) условие существования каждого программиста. Спасибо за ссылку. Читаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.06.2006, 13:54
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
Jurisfox... Подготовлен, но не завершен цикл статей, по XMLAdapter'у и по работе с XML в целом. Скоро появится. Пока можно воспользоваться русским HELP по 9-ке, где практически все, что связано c XMLAdapter'ом переведено. ... А по подробнее???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.06.2006, 17:55
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
Hi alex_lip! В XMLAdapter можно засунуть "свои" XMLTables со "своими" XMLFields - а уж в них можно настроить достаточно сложный разбор - в том числе и с использованием XPath выражений для извлечения некоторых полей и таблиц - т.е. даже если в исходном XML некоторая таблица "разбросана" по разным уровням иерархии, часть полей представлена "элементами" (т.е. значения внутри тегов) а часть "атрибутами" (т.е. значения в кавычках внутри тега) - то и это вполне возможно разобрать. Хотя с практической точки зрения, более простым может оказаться 2-х ступенчатая схема - сначала при помощи XSLT-преобразования обработать этот XML (и преобразовать его в вид "родной" для фокса), а уже потом загружать в XAD - при этом он сам создаст таблицы и поля - т.е. со стороны фокса не потребуется лишних телодвижений... Кстати задавая вопрос следовало бы привести примеры твоего XML и XSD файлов и требуемую структуру выходных курсоров - возможно кому-нить было-бы не лень написать готовый код :) Говорить про абстрактные вещи можно долго, но без практической пользы - а вот на примере возможно показать более быстро и наглядно :) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.06.2006, 09:27
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
==Кстати задавая вопрос следовало бы привести примеры твоего XML и XSD файлов и требуемую структуру выходных курсоров - возможно кому-нить было-бы не лень написать готовый код :) Говорить про абстрактные вещи можно долго, но без практической пользы - а вот на примере возможно показать более быстро и наглядно :) == Здравствуйте Игорь! Файлы больно здоровые. Таблиц ~30 полей ~120-140 - трудно оценить. Все очень запутанно. Спецификации тоже нет. К тому же несут некоторую долю секретности. Реально ко мне приходит только хml файл. А схему я пытаюсь генерить при помощи Altova XMLSpy2006. Мне нужно разложить и закачать всю информацию из XML. ==Хотя с практической точки зрения, более простым может оказаться 2-х ступенчатая схема - сначала при помощи XSLT-преобразования обработать этот XML (и преобразовать его в вид "родной" для фокса),== Можно поподробнее ??!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.06.2006, 18:24
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
Hi alex_lip! > Файлы больно здоровые. Таблиц ~30 полей ~120-140 - трудно оценить. Все > очень запутанно. В одном xml файле??? Да уж... Ну хотя-бы кусок с парой таблиц (желательно посложнее) выдернул - уже сам бы потом по аналогии доделал. > К тому же несут некоторую долю секретности. Я не думаю что структура может быть секретной, а сами данные легко заменить на всякий левак - при этом конечно уменьшив число "записей" до минимума - 2-3 вполне хватит. > Реально ко мне приходит только хml файл. А схему я пытаюсь генерить при > помощи Altova XMLSpy2006. Мне нужно разложить и закачать всю информацию из > XML. Это понятно :) > Можно поподробнее ??!! Не, я не расскажу - ищи книжки по XSLT, также по сайтам разным покопайся, кажется Михаил Дроздов кое что писал по этой теме... Вот например достаточно простой пример чисто фоксового разбора - схема кстати не требуется, а заодно и видно как использовать XPath для извлечения полей из "чужого" куска XML-файла: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. А вот и сам тестовый XML [pre] <?xml version="1.0" encoding="Windows-1251"?> <UTM> <pool id='1' type='std'> <card id='3' secret='96425361' balance='20.0' currency='810' expire_date='9/2/2006' usage_date='Еще нет' tp_id='0' /> <card id='4' secret='48955622' balance='20.0' currency='810' expire_date='9/2/2006' usage_date='Еще нет' tp_id='0' /> </pool> <pool id='2' type='ext'> <card id='5' secret='12345678' balance='10.0' currency='811' expire_date='9/2/2006' usage_date='Еще нет' tp_id='2' /> <card id='6' secret='90123456' balance='30.0' currency='811' expire_date='9/2/2006' usage_date='Еще нет' tp_id='3' /> </pool> </UTM> [/pre] Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.07.2006, 11:03
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
Текст помог, но что можно добавить, если имена тегов имеют разный регистр? (например, iD, Name) Как быть, если значение помимо id = "test " находится между тэгами <Name> </NAme>? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.07.2006, 14:59
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
Hi error5! > Текст помог, но что можно добавить, если имена тегов имеют разный регистр? > (например, iD, Name) Ну так и писать при описании XMLField - этот способ кстати годится и при обратной операции - т.е. по умолчанию XMLAdaper при выгрузке фоксовых курсоров переводит все имена в нижний регистр, а программе приёма возможно тредуется иной регистр - тогда приходится явно описывать все эти XML поля. Естественно что по стандарту XML одинаковые теги ВСЕГДА имеют одинаковый регистр - т.е. если в XML имеется пара тегов отличающихся регистром - то эти теги считаются разными! Более того: > Как быть, если значение помимо id = "test " находится между тэгами <Name> > </NAme>? Такая ситуация недопустима - не может парный тег отличатся от открывающего тега регистром! А вообще про "вложенные" теги есть и в моём примере - внимательнее смотри. И ещё раз повторюсь: >> Ну хотя-бы кусок с парой таблиц (желательно посложнее) выдернул Сложно говорить не представляя о чём же именно идёт речь. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.07.2006, 14:50
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
Конечно же я пробовал писать field как есть, но увы. Видимо этого недостаточно. :( Вот в Вашем примере, например, в файле для Pool id меняем на iD. И тоже самое в тексте программы. В итоге поле id идет нулевым, данные не берутся. Или что-то не так делаю? Вот есть такой XML: --------------------------------------------------------------------------- <?xml version="1.0" encoding="Windows-1251"?> <PacketEPD xmlns="urn:cbr-ru:ed:v1.1" EDDate="2006-05-29" EDQuantity="2" Sum="49494949"> <ED101 EDNo="002809" EDDate="2006-03-15" ChargeOffDate="2006-03-15"> <AccDoc AccDocNo="704" AccDocDate="2006-03-15"></AccDoc> <Name>ТЕСТ 1</Name> </ED101> <ED101 EDNo="555890" EDDate="2006-03-15" ChargeOffDate="2006-03-15"> <AccDoc AccDocNo="57" AccDocDate="2006-03-14"></AccDoc> <Name>Тест 2</Name> </ED101> </PacketEPD> --------------------------------------------------------------------------- Тут мне нужна одна таблица, ED101 и поидее 2 записи. Скорее всего придется формировать 3 таблицы ed101, AccDoc и Name. А уже потом совмещать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.07.2006, 00:46
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
Hi error5! > Конечно же я пробовал писать field как есть, но увы. Видимо этого > недостаточно. Скорее не там или не так пробовал... > Вот в Вашем примере, например, в файле для Pool id меняем на iD. Ну напрмиер это... > И тоже самое в тексте программы. "Тоже" это что именно? Alias? Так он не рулит - рулит XMLName - причём т.к. поле id из тега pool используется 2 раза - один раз для курсора pool как PK и второй раз для курсора card как FK (там как раз используется XPath выражение) - то и меняем в 2-х строках. После этого всё работает. Конечно переименовать надо ОБА id=... в XML файле. > В итоге поле id идет нулевым, данные не берутся. Значит нет в XML поля с таким точно именем - iD, ID, id, ID - это 4 совершенно разных "имени" :) > Вот есть такой XML: > Тут мне нужна одна таблица, ED101 и поидее 2 записи. Только если в соответствии со схемой внутри тега ED101 не может быть более одного AccDoc и одного Name - иначе не получится (но и тогда не обязательно 3 таблицы - можно и в одну или в две, но "ведущей" будет не ED101 а AccDoc или Name или они обе - ну это думаю понятно :)) PUBLIC loXMLAdapter AS XMLAdapter, ; loXMLTable AS XMLTable, ; loXMLField AS XMLField loXMLAdapter = CREATEOBJECT("XMLAdapter") m.loXMLAdapter.PreserveWhiteSpace = .T. m.loXMLAdapter.UseCodePage = .T. m.loXMLAdapter.XMLSchemaLocation = "" m.loXMLAdapter.XMLName = STRCONV("PacketEPD", 5) loXMLTable = CREATEOBJECT("XMLTable") m.loXMLTable.Alias = "MyTable" m.loXMLTable.CodePage = 1251 m.loXMLTable.XMLName = STRCONV("ED101", 5) loXMLField = CREATEOBJECT("XMLField") m.loXMLField.Alias = "EDNo" m.loXMLField.DataType = "C" m.loXMLField.MaxLength = 10 m.loXMLField.IsAttribute = .T. m.loXMLField.XMLName = STRCONV("EDNo", 5) m.loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName) loXMLField = CREATEOBJECT("XMLField") m.loXMLField.Alias = "EDDate" m.loXMLField.DataType = "D" m.loXMLField.IsAttribute = .T. m.loXMLField.XMLName = STRCONV("EDDate", 5) m.loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName) loXMLField = CREATEOBJECT("XMLField") m.loXMLField.Alias = "ChargeOffDate" m.loXMLField.DataType = "D" m.loXMLField.IsAttribute = .T. m.loXMLField.XMLName = STRCONV("ChargeOffDate", 5) m.loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName) loXMLField = CREATEOBJECT("XMLField") m.loXMLField.Alias = "AccDocNo" m.loXMLField.DataType = "I" m.loXMLField.IsAttribute = .T. m.loXMLField.XMLNameIsXPath = .T. m.loXMLField.XMLName = STRCONV("AccDoc/@AccDocNo", 5) m.loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName) loXMLField = CREATEOBJECT("XMLField") m.loXMLField.Alias = "AccDocDate" m.loXMLField.DataType = "D" m.loXMLField.IsAttribute = .T. m.loXMLField.XMLNameIsXPath = .T. m.loXMLField.XMLName = STRCONV("AccDoc/@AccDocDate", 5) m.loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName) loXMLField = CREATEOBJECT("XMLField") m.loXMLField.Alias = "Name" m.loXMLField.DataType = "C" m.loXMLField.MaxLength = 50 m.loXMLField.IsAttribute = .F. m.loXMLField.XMLName = STRCONV("Name", 5) m.loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName) m.loXMLAdapter.Tables.Add(m.loXMLTable, m.loXMLTable.XMLName) ? m.loXMLAdapter.LoadXML("test1.xml", .T., .T.) USE IN SELECT("MyTable") ? m.loXMLAdapter.Tables(1).ToCursor() BROWSE LAST NOWAIT > Скорее всего придется формировать 3 таблицы ed101, AccDoc и Name. А уже > потом совмещать? Можно и так - это неплохой способ, если допустимо "множество" AccDoc и/или Name внутри одного ED101... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.07.2006, 18:00
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
Да совсем забыл - упоминание namespace из XML следует убрать (это кусок текста xmlns="urn:cbr-ru:ed:v1.1") - иначе действительно XAD не может разобрать (возможно это баг, а может просто такая особенность). Один лишь XMLSchemaLocation = "" тут почему-то не помогает. Что касается "отсутствия спецификации" - так это вы батенька ленитесь - Google по запросу имени вышеуказанного namespace моментально выводит на сайт Центробанка, где можно скачать соответствующие схемы - причём с русскоязычными комментариями. Правда там сейчас более свежая версия на виду - 1.1.2 но и ссылки на старую 1.1.0 тоже есть... WBR, Igor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.07.2006, 18:35
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.07.2006, 18:36
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.07.2006, 18:36
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.07.2006, 10:10
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
Igor KorolyovЧто касается "отсутствия спецификации" - так это вы батенька ленитесь - Google по запросу имени вышеуказанного namespace моментально выводит на сайт Центробанка, где можно скачать соответствующие схемы - причём с русскоязычными комментариями. Правда там сейчас более свежая версия на виду - 1.1.2 но и ссылки на старую 1.1.0 тоже есть... WBR, Igor При подключении схемы VFP 9 говорит что схема сложна. Искал во многих форумах решение данной проблемы, но нигде не нашел. :о( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2006, 02:50
|
|||
|---|---|---|---|
|
|||
xml (Ну объясните мне неразумному!!) |
|||
|
#18+
Hi error5! > При подключении схемы VFP 9 говорит что схема сложна. Так оно и есть - видимо фокс не в состоянии переваривать произвольные схемы... Наверное лишь .NET Dataset (да и тот в урезанном виде), и самые простые "плоские" схемы ему по силам. В общем не надо даже пытаться подсунуть фоксу эту сложную схему - бог с ней с валидацией XML-я... Короче говоря, для тебя есть несколько вариантов: 1) Как я уже и говорил - удалить из XML упоминания этого хитрого namespace - тогда работает приведенный мной код. 2) Дописать следующие команды в пример: m.loXMLAdapter.XMLSchemaLocation = "" && Эта строка уже есть в примере m.loXMLAdapter.XMLNamespace = STRCONV("urn:cbr-ru:ed:v1.1", 5) m.loXMLAdapter.XMLPrefix = STRCONV("aa", 5) && см п.3 m.loXMLAdapter.DeclareXMLPrefix=.T. && см п.3 Т.е. если просто указать "правильное" имя namespace-а для XMLAdapter, то фокс станет выбирать данные - НО тут кроется подвох - не знаю связано это или нет со статьёй MSKB 288147 "PRB: Using XPath to Query Against a User-Defined Default Namespace" - но не работает как положено XPath - а без этого со сложными документами XMLAdapter не разберётся никак... 3) Как реализация одного из советов в указанной выше статье - применение ЯВНЫХ префиксов для namespace-ов - для XMLAdapter это можно указать через свойства XMLPrefix и DeclareXMLPrefix - тогда можно модифицировать в моём примере XPath запросы в вид "aa:AccDoc/@AccDocNo" и соответственно "aa:AccDoc/@AccDocDate" (думаю очевидно где же именно нужно это поменять в коде) и получить вполне работоспособный пример для твоего XML-я. Конечно можно в качестве префикса и что-то отличное от "aa" указать главное остаться в рамках стандарта именования префиксов namespace-ов :) 4) Ну и наконец не упоминавшийся доселе способ (поскольку он жутко "тупой и прямолинейный") - прямое использование парсера - т.е. создание объекта класса MSXML2.DomDocument, загрузка в него XML-я, и кропотливая работа с его "выборками" в циклах - я помнится когда-то давным-давно публиковал пример для разбора "иерархического" XML-я - принципы там простые - но кодировать довольно много надо (хотя и с XAD как видишь описания получаются весьма массивные)... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=41&mobile=1&tid=1591250]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
171ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 450ms |

| 0 / 0 |
