powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / XML c древовидной структурой
10 сообщений из 10, страница 1 из 1
XML c древовидной структурой
    #37261851
fox123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уже ни раз поднималась эта тема, все что нашла - прочитиала. ответа нет((
нужно импортировать xml в один dbf с такой структурой:

<NAME1 Поле1=1 Поле2=2 Поле3=3/>
<NAME2 Поле4=4 Поле5=5 Поле6=6>
<NAME3 Поле1=1 Поле2=2 Поле3=3/>
<NAME2>

что означает вложение в тег NAME2 NAME3?
обычную структуру типо этой:

<NAME1 Поле1=1 Поле2=2 Поле3=3/>
<NAME2 Поле4=4 Поле5=5 Поле6=6/>

импортирует хорошо. использую код:

USE (SYS(5) + CURDIR() + "\КУДА.dbf") IN 0
IF !FILE(SYS(5) + CURDIR() + "\ОТКУДА.xml")
MESSAGEBOX("NO File", 16, "EXPORT")
RETURN -1
ENDIF
XMLTOCURSOR((SYS(5) + CURDIR() + "\ОТКУДА"), "КУДА", 8192+512)
MESSAGEBOX("dobavleno", 16, "import")
use

Я так понимаю различные NAME Говорят о том, что это xml экспортировался из нескольких таблиц. нужно собрать xml в одну таблицу. как это сделать с помощью XMLTOCURSOR?
...
Рейтинг: 0 / 0
XML c древовидной структурой
    #37261852
fox123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот тут нашла http://forum.foxclub.ru/read.php?29,355533 что-то интересное.

Беру файлик из его архива и запускаю в программе код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
oXA=CREATEOBJECT( "XMLAdapter") 
lcXML = STRCONV(FILETOSTR("DDVD.XML"),  11 ) 
oXA.XMLSchemaLocation='ddvd.xsd' 
oXA.LoadXML(lcXML, .F.) 
?oXa.tables.Count 
For each oXT in oXA.Tables 
oXt.ToCursor() 
next

вроде выполняется, только не понятно что делается. никак результатов. видимо я опять что-то не так поняла.
...
Рейтинг: 0 / 0
XML c древовидной структурой
    #37261904
fox123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я наверно опять задачу непонятно сформулировала?....
...
Рейтинг: 0 / 0
XML c древовидной структурой
    #37262132
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML - файл с данными
XSD - схема данных. Какой формат имеют данные в файле XML

Надо полагать, что файл XSD взятый по ссылке никак не может соответствовать содержимому Вашего файла XML.

Общая концепция работы FoxPro с файлами XML описана в справке FoxPro.

Преобразование между XML и данными Visual FoxPro

Как видите, для автоматического преобразования XML в курсор FoxPro файл XML должен иметь вполне определенную структуру. Приведенная Вами структура файла XML не соответствует ни одной из трех возможных структур для автоматического преобразования. Это значит, что Вам придется выполнить это преобразование вручную или в "полуавтоматическом" режиме. Пример "полуавтомата" есть по приведенной Вами ссылке в низу обсуждения
...
Рейтинг: 0 / 0
XML c древовидной структурой
    #37263850
fox123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ, Спасибо! про xsd стало понятно, только там в примерах немного другая структура. пробую переделать под себя но есть вопросы.
вот структура моего xml:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
< 111  Поле1="" Поле2="" Поле3="" Поле4="">
  < 222  Поле5="" Поле6="">
    < 333 - 1  Поле7="" Поле8="" Поле9="" Поле10=""/>
    < 333 - 2  Поле11="" Поле12="" Поле13="" Поле14=""/>
    < 333 - 3  Поле15="" Поле16="" Поле17="" Поле18=""/>
    < 333 - 4  Поле19="" Поле20="" Поле21="" Поле22="">
      < 444  Поле23="" Поле24="" Поле25=""/>
    < 333 - 4 />
  < 222 />
.....
  < 222  Поле5="" Поле6="">
    < 333 - 1  Поле7="" Поле8="" Поле9="" Поле10=""/>
    < 333 - 2  Поле11="" Поле12="" Поле13="" Поле14=""/>
    < 333 - 3  Поле15="" Поле16="" Поле17="" Поле18=""/>
    < 333 - 4  Поле19="" Поле20="" Поле21="" Поле22="">
      < 444  Поле23="" Поле24="" Поле25=""/>
    < 333 - 4 />
  < 222 />
< 111 />

правильно ли я сделала файл структуры и как оформить для четвертого вложения <444 ../> ??
Код: 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.
<?xml version="1.0" encoding="Windows-1252"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="111">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="222">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="333-1">
                <xs:complexType>
                  <xs:sequence>
		  <xs:element name="поле7" type="xs:string" />
              	  <xs:element name="поле8" type="xs:string" />
                  <xs:element name="поле9" type="xs:unsignedInt" />
                  <xs:element name="поле10" type="xs:unsignedI
                  </xs:sequence>
		</xs:complexType>
	      </xs:element>
	      <xs:element maxOccurs="unbounded" name=" 333 - 2 ">
                <xs:complexType>
                  <xs:sequence>
		  <xs:element name="поле11" type="xs:string" />
              	  <xs:element name="поле12" type="xs:string" />
                  <xs:element name="поле13" type="xs:unsignedInt" />
                  <xs:element name="поле14" type="xs:unsignedInt" />
                  </xs:sequence>
		</xs:complexType>
	      </xs:element>
	      <xs:element maxOccurs="unbounded" name=" 333 - 3 ">
                <xs:complexType>
                  <xs:sequence>
		  <xs:element name="поле15" type="xs:string" />
              	  <xs:element name="поле16" type="xs:unsignedInt" />
                  <xs:element name="поле17" type="xs:unsignedInt" />
                  <xs:element name="поле18" type="xs:unsignedInt" />
                  </xs:sequence>
		</xs:complexType>
	      </xs:element>
	      <xs:element maxOccurs="unbounded" name=" 333 - 4 ">
                <xs:complexType>
                  <xs:sequence>
		  <xs:element name="поле19" type="xs:string" />
              	  <xs:element name="поле20" type="xs:unsignedInt" />
                  <xs:element name="поле21" type="xs:unsignedInt" />
                  <xs:element name="поле22" type="xs:unsignedInt" />
                  </xs:sequence>
		</xs:complexType>
	      </xs:element>
            </xs:sequence>
            <xs:attribute name="поле5" type="xs:unsignedInt" use="required" />
	    <xs:attribute name="поле6" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="поле1" type="xs:string" use="required" />
      <xs:attribute name="поле2" type="xs:unsignedShort" use="required" />
      <xs:attribute name="поле3" type="xs:string" use="required" />
      <xs:attribute name="поле4" type="xs:decimal" use="required" />
    </xs:complexType>
  </xs:element>
</xs:schema>
...
Рейтинг: 0 / 0
XML c древовидной структурой
    #37265863
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не занимался XML-файлами. Понимаю только общие принципы. Поэтому оценить "правильность" могу лишь формально.

Принцип описания примерно такой:

Элемент с именем "111" имеет "комплексный" тип данных (complexType). Этот "комплекс" состоит из набора "строк" (sequence) и "атрибутов" данного элемента (attribute).

В свою очередь, набор строк (sequence) состоит из элементов с именем "222"

В свою очередь, элемент с именем "222" имеет "комплексный" тип данных (complexType). Этот "комплекс" состоит из набора "строк" (sequence) и "атрибутов" данного элемента (attribute).

Ну, и так далее. До последнего элемента.

Все это оформляется в виде вложенных "скобок". Т.е. кто из чего состоит определяется соответствующим открывающим и закрывающим тегом. Ну, как скобки в арифметических выражениях.

Соответственно, исходя именно из такой логики, у Вас ошибка уже в описании элемента "333-1", поскольку Поле7, Поле8, Поле9, Поле10 не есть новые элементы некой последовательности (элемент "333-1" не содержит внутри себя набор "строк", т.е. последовательностей). Это атрибуты (attribute) данного элемента. И именно через данный тег их и следует описывать.

Но, повторюсь, это чисто формальный разбор без понимания смысла. Возможно и не правильный. Оценить правильность результата Вы можете только на практике. Будет работать Ваша схема или нет. Т.е. будут ли загружаться данные в таблицы.
...
Рейтинг: 0 / 0
XML c древовидной структурой
    #37266222
fox123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь! переделала, но не работает. говорит ошибка как раз в этих атрибутах. xs:attribute is not allowed In this context
может кто-нибудь знает как исправить

Код: 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.
<?xml version="1.0" encoding="Windows-1252"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="111">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="222">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="333-1">
		  <xs:attribute name="поле7" type="xs:string" />
              	  <xs:attribute name="поле8" type="xs:string" />
                  <xs:attribute name="поле9" type="xs:unsignedInt" />
                  <xs:attribute name="поле10" type="xs:unsignedI
	      </xs:element>
	      <xs:element maxOccurs="unbounded" name=" 333 - 2 ">
		  <xs:attribute name="поле11" type="xs:string" />
              	  <xs:attribute name="поле12" type="xs:string" />
                  <xs:attribute name="поле13" type="xs:unsignedInt" />
                  <xs:attribute name="поле14" type="xs:unsignedInt" />
	      </xs:element>
	      <xs:element maxOccurs="unbounded" name=" 333 - 3 ">
		  <xs:attribute name="поле15" type="xs:string" />
              	  <xs:attribute name="поле16" type="xs:unsignedInt" />
                  <xs:attribute name="поле17" type="xs:unsignedInt" />
                  <xs:attribute name="поле18" type="xs:unsignedInt" />
	      </xs:element>
	      <xs:element maxOccurs="unbounded" name=" 333 - 4 ">
		  <xs:attribute name="поле19" type="xs:unsignedInt" />
                  <xs:attribute name="поле20" type="xs:unsignedInt" />
                  <xs:attribute name="поле21" type="xs:string" />
                  <xs:attribute name="поле22" type="xs:string" />
                <xs:complexType>
                  <xs:sequence>
		  <xs:element name=" 444 " type="xs:string" >
                  <xs:attribute name="поле23" type="xs:unsignedInt" />
                  <xs:attribute name="поле24" type="xs:unsignedInt" />
                  <xs:attribute name="поле25" type="xs:string" />
                  </xs:element>
                  </xs:sequence>
		</xs:complexType>
	      </xs:element>
            </xs:sequence>
            <xs:attribute name="поле5" type="xs:unsignedInt" use="required" />
	    <xs:attribute name="поле6" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="поле1" type="xs:string" use="required" />
      <xs:attribute name="поле2" type="xs:unsignedShort" use="required" />
      <xs:attribute name="поле3" type="xs:string" use="required" />
      <xs:attribute name="поле4" type="xs:decimal" use="required" />
    </xs:complexType>
  </xs:element>
</xs:schema>
...
Рейтинг: 0 / 0
XML c древовидной структурой
    #37266226
fox123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fox123вот тут нашла http://forum.foxclub.ru/read.php?29,355533 что-то интересное.

Беру файлик из его архива и запускаю в программе код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
oXA=CREATEOBJECT( "XMLAdapter") 
lcXML = STRCONV(FILETOSTR("DDVD.XML"),  11 ) 
oXA.XMLSchemaLocation='ddvd.xsd' 
oXA.LoadXML(lcXML, .F.) 
?oXa.tables.Count 
For each oXT in oXA.Tables 
oXt.ToCursor() 
next

вроде выполняется, только не понятно что делается. никак результатов. видимо я опять что-то не так поняла.

и сам пример с их исходной xml у меня тоже не понятно работает. ошибок не выдает, но и результата не вижу. он должен после выполнения курсор открывать? а как сделать, чтобы в заранее созданную таблицу импортировались данные?
...
Рейтинг: 0 / 0
XML c древовидной структурой
    #37266768
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам же явно написали в сообщении об ошибке, что тег "attribute" использован не корректно. Не в том месте. Не в том контексте.

Ну, опять же, чисто формально. Разве может тег "attribute" существовать вне скобок "complexType"? Описание одного элемента должно иметь примерно такой вид

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<xs:element maxOccurs="unbounded" name="...">
  <xs:complexType>
    <xs:sequence>
    (...)
    </xs:sequence>
    <xs:attribute name="..." type="..." />
    <xs:attribute name="..." type="..." />
  </xs:complexType>
</xs:element>

Если последовательностей нет, то теги <xs:sequence> пропускаются. А теперь сравните с тем, что у Вас написано...
...
Рейтинг: 0 / 0
XML c древовидной структурой
    #37266782
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот документация по описанию элемента без последовательностей. Т.е. только с атрибутами

XSD Empty Elements
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / XML c древовидной структурой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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