Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / xml (Ну объясните мне неразумному!!) / 23 сообщений из 23, страница 1 из 1
09.06.2006, 15:24
    #33783689
alex_lip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
Please!! Объясните!!
есть xml - файл
есть к нему xsd - схема
Как мне в vfp9 получить из этого файла несколько связанных таблиц, описанных в xsd схеме????
Или хотя бы один курсор, но ПРАВИЛЬНО созданный. Не две строчки и все данные в мемо-поле !!!
...
Рейтинг: 0 / 0
10.06.2006, 01:55
    #33784732
Jurisfox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
Есть такая чудесная штука, которая называется XMLAdapter.

Никогда не говори "невозможно", просто попробуй сделать иначе!
JS (at FoxClub)
...
Рейтинг: 0 / 0
13.06.2006, 09:01
    #33786707
alex_lip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
Да знаю что есть. Мне бы примерчик?! Или ссылочку?! Именно для нескольких связанных таблиц! То что приведено в solution - для моего XML файла не работает.
...
Рейтинг: 0 / 0
13.06.2006, 09:29
    #33786739
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
alex_lipДа знаю что есть. Мне бы примерчик?! Или ссылочку?! Именно для нескольких связанных таблиц! То что приведено в solution - для моего XML файла не работает.
Если по английски читаете, то могу подкинуть...
...
Рейтинг: 0 / 0
13.06.2006, 09:46
    #33786756
Jurisfox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
В общем-то ваша задача решается достаточно просто.
Условия: XML файл является "правильным" XML файлом.
Для файла имеется схема (вложенная или внешняя).

Если схема внешняя, заносим ее местонахождение
в XMLSchemaLocation. При исполнении метода LoadXML
схема будет прочитана и для каждой таблицы будет
создан объект XMLTable. Обратиться к объекту можно
через объект коллекции Tables. И далее исполняем метод
ToCursor для каждого из объектов коллекции таблиц.

Подготовлен, но не завершен цикл статей, по XMLAdapter'у
и по работе с XML в целом. Скоро появится. Пока можно
воспользоваться русским HELP по 9-ке, где практически
все, что связано c XMLAdapter'ом переведено.


Никогда не говори "невозможно", просто попробуй сделать иначе!
JS (at FoxClub)
...
Рейтинг: 0 / 0
13.06.2006, 12:26
    #33787193
alex_lip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
если бы так просто...
в одном случае 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
...
Рейтинг: 0 / 0
13.06.2006, 15:38
    #33787910
alex_lip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
acces и то раскладывает структуру таблицы(правда без данных)
а fox - никак ?!?!?!?!?
...
Рейтинг: 0 / 0
13.06.2006, 16:00
    #33788015
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
Вы так и не просветили людей по поводу владения английским языком...

Пример для Microsoft продуктов

Happy reading!
...
Рейтинг: 0 / 0
14.06.2006, 13:03
    #33789974
alex_lip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
==Вы так и не просветили людей по поводу владения английским языком...==
Уважаемый Sergey Ch!
Английский технический - это необходимое(но не достаточное) условие существования каждого программиста. Спасибо за ссылку. Читаю.
...
Рейтинг: 0 / 0
14.06.2006, 13:54
    #33790144
AlikWishin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
Jurisfox...

Подготовлен, но не завершен цикл статей, по XMLAdapter'у
и по работе с XML в целом. Скоро появится. Пока можно
воспользоваться русским HELP по 9-ке, где практически
все, что связано c XMLAdapter'ом переведено.
...

А по подробнее????
...
Рейтинг: 0 / 0
17.06.2006, 17:55
    #33797508
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
Hi alex_lip!

В XMLAdapter можно засунуть "свои" XMLTables со "своими" XMLFields - а уж в
них можно настроить достаточно сложный разбор - в том числе и с
использованием XPath выражений для извлечения некоторых полей и таблиц -
т.е. даже если в исходном XML некоторая таблица "разбросана" по разным
уровням иерархии, часть полей представлена "элементами" (т.е. значения
внутри тегов) а часть "атрибутами" (т.е. значения в кавычках внутри тега) -
то и это вполне возможно разобрать.

Хотя с практической точки зрения, более простым может оказаться 2-х
ступенчатая схема - сначала при помощи XSLT-преобразования обработать этот
XML (и преобразовать его в вид "родной" для фокса), а уже потом загружать в
XAD - при этом он сам создаст таблицы и поля - т.е. со стороны фокса не
потребуется лишних телодвижений...

Кстати задавая вопрос следовало бы привести примеры твоего XML и XSD файлов
и требуемую структуру выходных курсоров - возможно кому-нить было-бы не лень
написать готовый код :) Говорить про абстрактные вещи можно долго, но без
практической пользы - а вот на примере возможно показать более быстро и
наглядно :)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
19.06.2006, 09:27
    #33798684
alex_lip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
==Кстати задавая вопрос следовало бы привести примеры твоего XML и XSD файлов и требуемую структуру выходных курсоров - возможно кому-нить было-бы не лень написать готовый код :) Говорить про абстрактные вещи можно долго, но без практической пользы - а вот на примере возможно показать более быстро и наглядно :) ==

Здравствуйте Игорь!
Файлы больно здоровые. Таблиц ~30 полей ~120-140 - трудно оценить. Все очень запутанно. Спецификации тоже нет. К тому же несут некоторую долю секретности.
Реально ко мне приходит только хml файл. А схему я пытаюсь генерить при помощи Altova XMLSpy2006. Мне нужно разложить и закачать всю информацию из XML.

==Хотя с практической точки зрения, более простым может оказаться 2-х
ступенчатая схема - сначала при помощи XSLT-преобразования обработать этот
XML (и преобразовать его в вид "родной" для фокса),==
Можно поподробнее ??!!
...
Рейтинг: 0 / 0
24.06.2006, 18:24
    #33813047
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
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.
PUBLIC loXMLAdapter AS XMLAdapter, ;
    loXMLTable AS XMLTable, ;
    loXMLField AS XMLField

loXMLAdapter = CREATEOBJECT("XMLAdapter")
loXMLAdapter.PreserveWhiteSpace = .T.
loXMLAdapter.UseCodePage = .T.
loXMLAdapter.XMLSchemaLocation = ""

loXMLTable = CREATEOBJECT("XMLTable")
loXMLTable.Alias = "card"
loXMLTable.CodePage =  1251 
loXMLTable.XMLName = STRCONV("card",  5 )

loXMLField = CREATEOBJECT("XMLField")
loXMLField.Alias = "id"
loXMLField.DataType = "I"
loXMLField.IsAttribute = .T.
loXMLField.XMLName = STRCONV("id",  5 )
loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName)

loXMLField = CREATEOBJECT("XMLField")
loXMLField.Alias = "secret"
loXMLField.DataType = "I"
loXMLField.IsAttribute = .T.
loXMLField.XMLName = STRCONV("secret",  5 )
loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName)

loXMLField = CREATEOBJECT("XMLField")
loXMLField.Alias = "balance"
loXMLField.DataType = "B"
loXMLField.FractionDigits =  2 
loXMLField.IsAttribute = .T.
loXMLField.XMLName = STRCONV("balance",  5 )
loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName)

loXMLField = CREATEOBJECT("XMLField")
loXMLField.Alias = "currency"
loXMLField.DataType = "I"
loXMLField.IsAttribute = .T.
loXMLField.XMLName = STRCONV("currency",  5 )
loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName)

loXMLField = CREATEOBJECT("XMLField")
loXMLField.Alias = "expire_date"
loXMLField.DataType = "C"
loXMLField.MaxLength =  10 
loXMLField.IsAttribute = .T.
loXMLField.XMLName = STRCONV("expire_date",  5 )
loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName)

loXMLField = CREATEOBJECT("XMLField")
loXMLField.Alias = "usage_date"
loXMLField.DataType = "C"
loXMLField.MaxLength =  10 
loXMLField.IsAttribute = .T.
loXMLField.XMLName = STRCONV("usage_date",  5 )
loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName)

loXMLField = CREATEOBJECT("XMLField")
loXMLField.Alias = "tp_id"
loXMLField.DataType = "I"
loXMLField.IsAttribute = .T.
loXMLField.XMLName = STRCONV("tp_id",  5 )
loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName)

loXMLField = CREATEOBJECT("XMLField")
loXMLField.Alias = "Pool_id"
loXMLField.DataType = "I"
loXMLField.IsAttribute = .T.
loXMLField.XMLNameIsXPath = .T.
loXMLField.XMLName = STRCONV("../@id",  5 )
loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName)

loXMLAdapter.Tables.Add(m.loXMLTable, m.loXMLTable.XMLName)

loXMLTable = CREATEOBJECT("XMLTable")
loXMLTable.Alias = "pool"
loXMLTable.CodePage =  1251 
loXMLTable.XMLName = STRCONV("pool",  5 )

loXMLField = CREATEOBJECT("XMLField")
loXMLField.Alias = "id"
loXMLField.DataType = "I"
loXMLField.IsAttribute = .T.
loXMLField.XMLName = STRCONV("id",  5 )
loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName)

loXMLField = CREATEOBJECT("XMLField")
loXMLField.Alias = "type"
loXMLField.DataType = "C"
loXMLField.MaxLength =  20 
loXMLField.IsAttribute = .T.
loXMLField.XMLName = STRCONV("type",  5 )
loXMLTable.Fields.Add(m.loXMLField, m.loXMLField.XMLName)

loXMLAdapter.Tables.Add(m.loXMLTable, m.loXMLTable.XMLName)
loXMLAdapter.LoadXML("test1.xml", .T., .T.)

USE IN SELECT("card")
USE IN SELECT("pool")
loXMLAdapter.Tables( 1 ).ToCursor()
BROWSE LAST NOWAIT
loXMLAdapter.Tables( 2 ).ToCursor()
BROWSE LAST NOWAIT

А вот и сам тестовый 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
...
Рейтинг: 0 / 0
03.07.2006, 11:03
    #33826766
error5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
Текст помог, но что можно добавить, если имена тегов имеют разный регистр?
(например, iD, Name)
Как быть, если значение помимо id = "test " находится между тэгами <Name> </NAme>?
...
Рейтинг: 0 / 0
03.07.2006, 14:59
    #33827755
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
Hi error5!

> Текст помог, но что можно добавить, если имена тегов имеют разный регистр?
> (например, iD, Name)

Ну так и писать при описании XMLField - этот способ кстати годится и при
обратной операции - т.е. по умолчанию XMLAdaper при выгрузке фоксовых
курсоров переводит все имена в нижний регистр, а программе приёма возможно
тредуется иной регистр - тогда приходится явно описывать все эти XML поля.
Естественно что по стандарту XML одинаковые теги ВСЕГДА имеют одинаковый
регистр - т.е. если в XML имеется пара тегов отличающихся регистром - то эти
теги считаются разными! Более того:

> Как быть, если значение помимо id = "test " находится между тэгами <Name>
> </NAme>?

Такая ситуация недопустима - не может парный тег отличатся от открывающего
тега регистром! А вообще про "вложенные" теги есть и в моём примере -
внимательнее смотри.

И ещё раз повторюсь:

>> Ну хотя-бы кусок с парой таблиц (желательно посложнее) выдернул

Сложно говорить не представляя о чём же именно идёт речь.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
04.07.2006, 14:50
    #33830349
error5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
Конечно же я пробовал писать 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. А уже потом совмещать?
...
Рейтинг: 0 / 0
05.07.2006, 00:46
    #33831514
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
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
...
Рейтинг: 0 / 0
05.07.2006, 18:00
    #33833784
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
Да совсем забыл - упоминание namespace из XML следует убрать (это кусок текста xmlns="urn:cbr-ru:ed:v1.1") - иначе действительно XAD не может разобрать (возможно это баг, а может просто такая особенность). Один лишь XMLSchemaLocation = "" тут почему-то не помогает.
Что касается "отсутствия спецификации" - так это вы батенька ленитесь - Google по запросу имени вышеуказанного namespace моментально выводит на сайт Центробанка, где можно скачать соответствующие схемы - причём с русскоязычными комментариями. Правда там сейчас более свежая версия на виду - 1.1.2 но и ссылки на старую 1.1.0 тоже есть...

WBR, Igor
...
Рейтинг: 0 / 0
05.07.2006, 18:35
    #33833905
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
...
Рейтинг: 0 / 0
05.07.2006, 18:36
    #33833908
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
...
Рейтинг: 0 / 0
05.07.2006, 18:36
    #33833909
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
...
Рейтинг: 0 / 0
11.07.2006, 10:10
    #33844059
error5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
Igor KorolyovЧто касается "отсутствия спецификации" - так это вы батенька ленитесь - Google по запросу имени вышеуказанного namespace моментально выводит на сайт Центробанка, где можно скачать соответствующие схемы - причём с русскоязычными комментариями. Правда там сейчас более свежая версия на виду - 1.1.2 но и ссылки на старую 1.1.0 тоже есть...
WBR, Igor
При подключении схемы VFP 9 говорит что схема сложна. Искал во многих форумах решение данной проблемы, но нигде не нашел. :о(
...
Рейтинг: 0 / 0
12.07.2006, 02:50
    #33846482
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xml (Ну объясните мне неразумному!!)
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
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / xml (Ну объясните мне неразумному!!) / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]