powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / вывод курсора в XML файл, по определенному шаблону
25 сообщений из 26, страница 1 из 2
вывод курсора в XML файл, по определенному шаблону
    #35898350
vova_ukr_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дубль темы с foxclub
есть необходимость выгрузки данных в XML для загрузки в стороннюю систему.
есть файл шаблона XSD. Подскажите как выполнить выгрузку в XML.
Чтоб было легче понять что требуеться привожу примерное содержимое файла XML который мы должны будем формировать(в нем приведены не все теги,все упрощено).Пробовал искать по форуму подобное, но что то подходящее не нашел.Если подобное есть, то дайте пожалуйста ссылку.
Используеться VFP 8.0
Код: 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.
<?xml version="1.0" encoding="UTF-8"?>  
  <document>  
  	<Title> <!-- заголовок, описание документа-->  
  		<company>код компании</company>  
  		<NumDoc>№ файла</NumDoc>  
  		<DateStart>начальная дата</DateStart>  
  		<DateEnd>конечная дата</DateEnd>  
  		<opCount>количество записей-блоков "op" </opCount>  
  	</Title>  
  	<operation>  
  		<op>  
  			<id>системный № записи</id>  
  			<source> <!-- данные о источнике-->  
  				<id>идентификатор источника</id>  
  				<name>назваине источника</name>  
  				<Cena>цена остатка после операции</Cena>  
  				<Count>количество остатка после операции</Count>  
  			</source>  
  			<Destinations> <!-- данные о получатле-->  
  				<id>идентификатор получателя</id>  
  				<name>назваине источника</name>  
  				<Cena>цена остатка после операции</Cena>  
  				<Count>количество остатка после операции</Count>  
  			</Destinations>  
  			<Cena>цена по операции</Cena>  
  			<Count>количество по операции</Count>		  
  			<Tovar>  
  				<NN>номенклатурный номер товара</NN>  
  				<Name>название товара</Name>  
  			</Tovar>  
  		</op>  
  		<op>  
  			...  
  		</op>  
  		<op>  
  			...  
  		</op>  
  	</operation>  
    
  </document>
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35898458
Arbuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо быстрее будет "ручное" формирование строки, содержащей xml заданного формата и потом strtofile()
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35898471
vova_ukr_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arbuzимхо быстрее будет "ручное" формирование строки, содержащей xml заданного формата и потом strtofile()
впринципе так и думал, подобным образом решал это в delphi.
как я понимаю, запускать strtofile() прийдеться для каждой строки?
в STRTOFILE(cExpression, cFileName [, lAdditive | nFlag]) параметр nFlag надо установить в 1?(Строка будет добавлена в конец файла)
и при этом необходимо провести предвариетльное конвертирование в UTF8?
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35898517
vova_ukr_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как с помощью STRTOFILE() дописывать в файл с новой строки?
попробовал
Код: plaintext
1.
2.
3.
STRTOFILE(STRCONV('<?xml version="1.0" encoding="UTF-8"?>', 9 ),"c:\1.xml")
STRTOFILE(STRCONV('<document>', 9 ),"c:\1.xml", 1 )
STRTOFILE(STRCONV('<Title>Заголовок</Title>', 9 ),"c:\1.xml", 1 )
STRTOFILE(STRCONV('</document>', 9 ),"c:\1.xml", 1 ) 

в результате в файле одна строка, а как сделать чтоб дописывал в новую строку?
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35898522
vova_ukr_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поробовал так
Код: plaintext
1.
2.
3.
STRTOFILE(STRCONV('<?xml version="1.0" encoding="UTF-8"?>'+CHR( 10 ), 9 ),"c:\1.xml")
STRTOFILE(STRCONV('<document>'+CHR( 10 ), 9 ),"c:\1.xml", 1 )
STRTOFILE(STRCONV('<Title>Заголовок</Title>'+CHR( 10 ), 9 ),"c:\1.xml", 1 )
STRTOFILE(STRCONV('</document>'+CHR( 10 ), 9 ),"c:\1.xml", 1 
вроде работает, но не могу проверить насколько корректно получаеться(и примет ли такой файл внешняя система). но это уже лучше чем ничего. Если у кого то есть варианты лучше, то хотелось бы услышать.
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35899137
Arbuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите образцовый xml - файл. Разделители строк там скорее всего chr(13)+chr(10) ?
Зачем strtofile() вызывать для каждой строки? Лишние обращения к файловой системе...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
crlf=CHR( 13 )+CHR( 10 )
...
cString=cString+'</Title>'+crlf+'<operation>'+crlf

DO WHILE .NOT. EOF()
    cString=cString+'<op>'+crlf+'<id>'
    ....
    cString=cString+'</op>'+crlf
    SKIP
ENDDO
...
cString=cString+'</operation>'+crlf+'</document>'+crlf

=filetostr(cString,"c:\1.xml")
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35899152
vova_ukr_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arbuz
Зачем strtofile() вызывать для каждой строки? Лишние обращения к файловой системе...


я не знаю какое ограничение на длину строки, поэтому чтоб не получилось, что будет отправлена слишком длинная строка в файл и вызываеться так часто strtofile()
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35899161
Arbuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Длина строки в VFP до 16 Мбайт
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35899163
Arbuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправляюсь : длина строковой переменной до 16 Мбайт, а длина оператора до 256 символов
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35899172
vova_ukr_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ArbuzПоправляюсь : длина строковой переменной до 16 Мбайт, а длина оператора до 256 символов
сечас сложно подсчитать сколько будет составлять объем первичной загрузки.
сначала прийдеться загрузить информацию за год-полтора, а потом за небольшие промежутьки времени.

но наверно уберу излишние вызовы функции. завтра начну пробовать.
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35900657
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторимхо быстрее будет "ручное" формирование строки, содержащей xml заданного формата и потом strtofile()
ага, я это называю: "с сапогом на шашку".

пример формирования для 9-й версии
http://www.sql.ru/forum/actualthread.aspx?tid=575387&hl=xmladapter

можете потестировать скорость и затем попробовать руками поклеить строки.

могут быть проблемы с трудозатратностью достижения некоторого предложенного вида,
но иногда проще пойти на уступки и сделать некотор.отступления от предложенного вида,
я имею ввиду загл.буквы в тегах и нест.заголовок
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35900694
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выясните, что произойдет если передать
автор в стороннюю систему
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
файлик с таким заголовком?

<?xml version = "1.0" encoding="UTF-8" [color=red]standalone="yes"[/color]?>
<TTT>
	<tt>
		<date> 09 - 03 - 30   03 : 23 : 11  P</date>
	</tt>
</TTT>
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35901365
vova_ukr_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимовыясните, что произойдет если передать
автор в стороннюю систему
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
файлик с таким заголовком?

<?xml version = "1.0" encoding="UTF-8" [color=red]standalone="yes"[/color]?>
<TTT>
	<tt>
		<date> 09 - 03 - 30   03 : 23 : 11  P</date>
	</tt>
</TTT>

ну судя по загрузкам в другую подсистему этой же компании, там важен регистр тегов. а подправлять под нас они не будут.
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35901377
vova_ukr_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимовыясните, что произойдет если передать
автор в стороннюю систему
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
файлик с таким заголовком?

<?xml version = "1.0" encoding="UTF-8" [color=red]standalone="yes"[/color]?>
<TTT>
	<tt>
		<date> 09 - 03 - 30   03 : 23 : 11  P</date>
	</tt>
</TTT>


сразу не заметил выделения. standalone="yes" быть не должно по их предоставленному примеру.

а пример формирования для 9-й версии
http://www.sql.ru/forum/actualthread.aspx?tid=575387&hl=xmladapter
под 8ой заработает?
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35902001
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторну судя по загрузкам в другую подсистему этой же компании, там важен регистр тегов. а подправлять под нас они не будут.

авторstandalone="yes" быть не должно по их предоставленному примеру

мне удавалось убеждать принимающую сторону и находить компромисы,
попробуйте оговорить детали, хотя есть некоторые решения.
мне удавалось убеждать и мне шли на уступки, был опыт,
когда требовали примерно то-же что Вы показали, но удалось
убедить и согласились и на теги и на заголовок и на разделители в датах,
просто немного поправили бубны на своей стороне.

переговорите с принимающей стороной, пусть сообщат, что произойдет
если будет предоставлен ф-л с тегами в нижнем регистре и с заголовком, который я показал.

попробуйте поработать под 8-й версией, адаптер появился в 8-й, в 9-й доработан.
(возможно что-то получится и в 8-й).

что мешает перейти на разработку с применением 9-й версии фокспро?
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35904345
vova_ukr_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пока буду пробовать на 8ке, при крайней необходимости, думаю, перейдем на 9ую версию
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35915322
vova_ukr_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пытаюсь настрить формирование файла с помощью XMLAdapter. Никак не получаеться вывести данные из курсора с кодировкой 1251 в XML файл в кодировке UTF8.
установил свойства XMLAdapter
RespectCursorCP = .T.
UTF8Encoded=.T.,
но того что указано в справке: "Устанавливает кодировочный аттрибут вывода UTF-8. Производится трансляция символов в UTF-8." не получилось. в заголовке фаqла указаyо что он в UTF-8, но текст набранный на русском отображаеться неверно.
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35915498
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпытаюсь настрить формирование файла с помощью XMLAdapter

вновь попытка играть в игру "что?где?когда?".
ок. версия фокспро?
опубликуйте пример, демонстрирующий проблему,
и опишите что Вы желаете.
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35918325
vova_ukr_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошелмимо
вновь попытка играть в игру "что?где?когда?".

Согласен. Попробую исправиться.

используется VFP 9.0
Данные принимаються из Oracle, но не думаю что проблема в этом, т.к. пробюлемы с кодировкой возникают и при создании файла XML из курсора FoxPro созданного его средствами.

когда запускаю следующий код дома (но в VFP8)
Код: 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.
Close Tables  
  Create Cursor First (nID N( 10 ), Cena N( 10 , 2 ) , Kolich N( 5 ) Not Null)  
  Insert Into First (nID, Cena, Kolich) ;  
  	Value ( 1 ,  10 , 5 )  
  Insert Into First (nID, Cena, Kolich) ;  
  	Value ( 1 ,  20 , 25 )	  
    
  Create Cursor Tovar (nID N( 10 ), NN C( 10 ), Name C( 20 ))  
  INSERT INTO Tovar (nID,NN,Name) ;  
  	VALUES ( 1 ,'1234567890','Товар1')  
    
  INSERT INTO Tovar (nID,NN,Name) ;  
  	VALUES ( 2 ,'0987654321','Товар2')	  
  Index On nID to 'c:\'+'Tovar'  
    
    
  Create Cursor Klient (nID N( 10 ), KodK C( 10 ), Name C( 20 ))  
  INSERT INTO Klient (nID,KodK,Name) ;  
  	VALUES ( 1 ,'11111','Клиент1')  
    
  INSERT INTO Klient (nID,KodK,Name) ;  
  	VALUES ( 2 ,'22222','Клиент2')	  
  Index On nID TO 'c:\'+'Klient'  
    
    
  Select First  
    
  Set Relation To nID Into Tovar Additive  
  Set Relation To nID Into Klient Additive  
    
    
  Local oXA As Xmladapter, oXT As Xmltable, oXF As Xmlfield  
  oXA = Createobject("XMLAdapter")  
    
  oXA.UTF8Encoded=.T.  
  oXA.RespectCursorCP = .T.  
 *отключил т.к. запускалось в VFP  8 , но данное свойство необюходимо  
 *oXA.RespectNesting = .T.   
  	  
  oXT=oXA.AddTableSchema('First')  
    
  oXT=oXA.AddTableSchema('Klient')  
  	oXT.Fields.Remove(Strconv('nid',  5 ))  
    
  oXT=oXA.AddTableSchema('Tovar')  
  	oXt.Fields.Remove(Strconv('nid',  5 ))  
    
  oXA.XMLName = Strconv('Operation',  5 )  
  oXA.XMLSchemaLocation = ''  
  oXA.ToXML('c:\Test.xml',,.T.)  
    
  Close Tables  
  Return
то получаю XML файл в нужной кодировке, с нормальным отображением кирилицы (только вложения не работают, т.к. oXA.RespectNesting = .T. отключено). но дело не в версии, т.к. на работе в 8ой версии результат не верен.
Код: 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.
<?xml version = "1.0" encoding="UTF-8" standalone="yes"?>
<Operation>
	<First>
		<nid>1</nid>
		<cena>10.00</cena>
		<kolich>5</kolich>
	</First>
	<First>
		<nid>1</nid>
		<cena>20.00</cena>
		<kolich>25</kolich>
	</First>
	<Klient>
		<kodk>11111</kodk>
		<name>Клиент1</name>
	</Klient>
	<Klient>
		<kodk>22222</kodk>
		<name>Клиент2</name>
	</Klient>
	<Tovar>
		<nn>1234567890</nn>
		<name>Товар1</name>
	</Tovar>
	<Tovar>
		<nn>0987654321</nn>
		<name>Товар2</name>
	</Tovar>
</Operation>

Когда же запускаю на работе, то получаеться следующее (только в строке oXA.RespectNesting = .T. снимаю признак коментария, но на кодировку не влияет - проверял)
Код: 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.
<?xml version = "1.0" encoding="UTF-8" standalone="yes"?>
<Operation>
          <First>
		 <nid>1</nid>
		 <cena>10.00</cena>
		 <kolich>5</kolich>
		 <Klient>
			 <kodk>11111</kodk>
			 <name>Êëèåíò1</name>
		 </Klient>
		 <Tovar>
			 <nn>1234567890</nn>
			 <name>Òîâàð1</name>
		 </Tovar>
	 </First>
	 <First>
		<nid>1</nid>
		<cena>20.00</cena>
		<kolich>25</kolich>
		<Klient>
			<kodk>11111</kodk>
			<name>Êëèåíò1</name>
		</Klient>
		<Tovar>
			<nn>1234567890</nn>
			<name>Òîâàð1</name>
		</Tovar>
	</First>
</Operation>

т.е. кирилица слетает.

по данному коду, также есть вопрос. как вложенную таблицу (например Klient) поместить между тегами <cena> <kolich>, т.е. чтоб получалось

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
...
<First>
	<nid>1</nid>
	<cena>20.00</cena>
	<Klient>
		<kodk>11111</kodk>
		<name>Клиент1</name>
	</Klient>
	<kolich>25</kolich>		
	<Tovar>
		<nn>1234567890</nn>
		<name>Товар1</name>
	</Tovar>
</First>
...
?
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35918932
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
Close Tables  
  Create Cursor First (nID N( 10 ), Cena N( 10 , 2 ) , Kolich N( 5 ) Not Null)  
  Insert Into First (nID, Cena, Kolich) ;  
  	Value ( 1 ,  10 , 5 )  
  Insert Into First (nID, Cena, Kolich) ;  
  	Value ( 1 ,  20 , 25 )	  
    
  Create Cursor Tovar (nID N( 10 ), NN C( 10 ), Name C( 20 ))  
  INSERT INTO Tovar (nID,NN,Name) ;  
  	VALUES ( 1 ,'1234567890','Товар1')  
    
  INSERT INTO Tovar (nID,NN,Name) ;  
  	VALUES ( 2 ,'0987654321','Товар2')	  
  Index On nID to 'c:\'+'Tovar'  
    
    
  Create Cursor Klient (nID N( 10 ), KodK C( 10 ), Name C( 20 ))  
  INSERT INTO Klient (nID,KodK,Name) ;  
  	VALUES ( 1 ,'11111','Клиент1')  
    
  INSERT INTO Klient (nID,KodK,Name) ;  
  	VALUES ( 2 ,'22222','Клиент2')	  
  Index On nID TO 'c:\'+'Klient'  
    
      
  Select First  
    
  Set Relation To nID Into Tovar Additive  
  Set Relation To nID Into Klient Additive 

     
  Local oXA As Xmladapter, oXT As Xmltable, oXF As Xmlfield  
  oXA = Createobject("XMLAdapter")  
    
with  oXA
	.UTF8Encoded=.T.  
	*.RespectCursorCP = .T.  
	.RespectNesting = .T.   
	.CODEPAGE= 1251   	  
    
    .AddTableSchema('First')  
    With .AddTableSchema('Klient')  
  		.Fields.Remove(Strconv('nid',  5 )) 
  	EndWith
  	With .AddTableSchema('Tovar')  
  		.Fields.Remove(Strconv('nid',  5 ))  
    EndWith
  
    
	.XMLName = Strconv('Operation',  5 )  
	.XMLSchemaLocation = '' 
	lcXml="" 
	.ToXML("lcXml")  &&('c:\Test.xml',,.T.)  
EndWith
    
  Close Tables  
  ? lcXml
  Return


авторпо данному коду, также есть вопрос. как вложенную таблицу (например Klient) поместить между тегами <cena> <kolich>

вопрос: зачем?
так ли это критично для принимающей стороны?
сообщите ре-т переговоров с теми, кому Вы будете отдавать
свои ф-лы. что они сообщили?
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35918955
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у Вас все правильно было,
сформированный файл с кодировкой, нужной Вам смотрится красиво,
но студией не открывается,
а вот так, прекрасно работает и открывается и теги в правильной кодировке


Код: 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.
Close Tables  
  Create Cursor First (nID N( 10 ), Cena N( 10 , 2 ) , Kolich N( 5 ) Not Null)  
  Insert Into First (nID, Cena, Kolich) ;  
  	Value ( 1 ,  10 , 5 )  
  Insert Into First (nID, Cena, Kolich) ;  
  	Value ( 1 ,  20 , 25 )	  
    
  Create Cursor Tovar (nID N( 10 ), NN C( 10 ), Name C( 20 ))  
  INSERT INTO Tovar (nID,NN,Name) ;  
  	VALUES ( 1 ,'1234567890','Товар1')  
    
  INSERT INTO Tovar (nID,NN,Name) ;  
  	VALUES ( 2 ,'0987654321','Товар2')	  
  Index On nID to 'c:\'+'Tovar'  
    
    
  Create Cursor Klient (nID N( 10 ), KodK C( 10 ), Name C( 20 ))  
  INSERT INTO Klient (nID,KodK,Name) ;  
  	VALUES ( 1 ,'11111','Клиент1')  
    
  INSERT INTO Klient (nID,KodK,Name) ;  
  	VALUES ( 2 ,'22222','Клиент2')	  
  Index On nID TO 'c:\'+'Klient'  
    
      
  Select First  
    
  Set Relation To nID Into Tovar Additive  
  Set Relation To nID Into Klient Additive 

     
  Local oXA As Xmladapter, oXT As Xmltable, oXF As Xmlfield  
  oXA = Createobject("XMLAdapter")  
    
with  oXA
	.UTF8Encoded=.T.  
	.RespectCursorCP = .T.  
	.RespectNesting = .T.   
	*.CODEPAGE= 1251   	  
    
    .AddTableSchema('First')  
    With .AddTableSchema('Klient')  
  		.Fields.Remove(Strconv('nid',  5 )) 
  	EndWith
  	With .AddTableSchema('Tovar')  
  		.Fields.Remove(Strconv('nid',  5 ))  
    EndWith
  
    
	.XMLName = Strconv('Operation',  5 )  
	.XMLSchemaLocation = '' 
	lcXml="" 
	.ToXML('c:\Test.xml',,.T.)   && ("lcXml")
EndWith
    
  Close Tables  
  ? lcXml
  Return
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35921211
vova_ukr_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Буду пробовать предложенное Вами решение.
прошелмимо
авторпо данному коду, также есть вопрос. как вложенную таблицу (например Klient) поместить между тегами <cena> <kolich>

вопрос: зачем?
так ли это критично для принимающей стороны?
сообщите ре-т переговоров с теми, кому Вы будете отдавать
свои ф-лы. что они сообщили?

если поменять структуру, то их система не понимает наш файл. А менять систему загрузки они не будут, т.к. не только наше предприятие передает им данные. Следовательно или менять для всех, или ни для кого.Если менять под каждого, то получиться система, которую в дальнейшем будет сложно сопровождать.

И еще один вопрос сразу. как получить теги в XML с нужным регистром? Пробовал сам выполнять преобразования
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	FOR I= 1  TO loXT.Fields.Count
		loXF=loXT.Fields.Item(I)

		loXT.Fields.Remove(I)
		loXF.XMLName=STRCONV(UPPER(loXF.Alias), 5 )
		loXT.Fields.Add(loXF,loXF.XMLName)
	NEXT
только вместо Upper() применял свою функцию преобразования, в которой по имени поля выполнялся выбор в do Case необходимого соответствия и возвращалось название поля в нужном регистре. Например:
ConvertTag('kodk') вернет 'KodK'
ConvertTag('name') вернет 'Name'
функция есть и вопрос только в корректном обходе всех полей курсора и изменения их названий из нижнего регистра в необходимый
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35921299
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
set default to Home()+"\Samples\Northwind\"
close databases all
USE northwind!customers IN  0  excl
SELECT customers 

local loXMLAdapter as XMLAdapter,  ;
	  laRR[ 1 ], lcXSD, lnElement ,  ;
	  lnField, loXField, loXTable

create cursor schema (name varchar( 20 ))
lcXSD = getXsd() &&filetostr("c:\2.xsd") -- чтобы не прикладывать файл
local laRR[ 1 ]
if alines(laRR, lcXSD,  8 , ["])>0
	for lnElement=1 to alen(laRR)
	 if atc("element name=",laRR(lnElement))>0
	 	insert into schema  value(laRR[lnElement+1])
	 endif 
	endfor
endif 
index on lower(name) tag name

loXMLAdapter = CREATEOBJECT("XMLAdapter") 
with loXMLAdapter
	store .t. to .RESPECTCURSORCP,   ;
				 .RESPECTNESTING,    ;
				 .PreserveWhiteSpace,;
				 .USECODEPAGE,       ;
				 .ForceCloseTag
	.CODEPAGE=1251 
	.XMLSCHEMALOCATION="" 
	.XMLNAME=STRCONV("MaIL",5) 

	loXTable=.AddTableSchema("customers",.f.,STRCONV("coNtacttitle",5)) 
	with loXTable
		FOR lnField=1 TO .Fields.Count 
			loXField=.Fields.Item(1) 
			.Fields.Remove(1)
			loXField.XMLName= STRCONV(iif(seek(lower(loXField.Alias),"schema"),schema.name, loXField.Alias),5)
			.Fields.Add(loXField,loXField.XMLName) 
		endfor
	endwith
	.TOXML("c:\ 1 .xml",,.t.) 

endwith




procedure getXsd
local lcXSD
text to lcXSD noshow pretext 15
  <?xml version=" 1 . 0 " encoding="utf- 8 " ?> 
- <xs:schema id="MaIL" xmlns="" xmlns:xs="http://www.w3.org/ 2001 /XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xs:annotation>
- <xs:appinfo source="urn:schemas-microsoft-com:xml-msdatasource">
- <DataSource DefaultConnectionIndex=" 0 " FunctionsComponentName="QueriesTableAdapter" Modifier="AutoLayout, AnsiClass, Class, Public" SchemaSerializationMode="IncludeSchema" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
  <Connections /> 
  <Tables /> 
  <Sources /> 
  </DataSource>
  </xs:appinfo>
  </xs:annotation>
- <xs:element name="MaIL" msdata:IsDataSet="true" msdata:Locale="en-US">
- <xs:complexType>
- <xs:choice minOccurs=" 0 " maxOccurs="unbounded">
- <xs:element name="coNtacttitle" minOccurs=" 0 " maxOccurs=" 79228162514264337593543950335 ">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="CustomerId">
- <xs:simpleType>
- <xs:restriction base="xs:string">
  <xs:maxLength value=" 4 " /> 
  </xs:restriction>
  </xs:simpleType>
  </xs:element>
- <xs:element name="CompanyName">
- <xs:simpleType>
- <xs:restriction base="xs:string">
  <xs:maxLength value=" 40 " /> 
  </xs:restriction>
  </xs:simpleType>
  </xs:element>
- <xs:element name="ContactTitle" minOccurs=" 0 ">
- <xs:simpleType>
- <xs:restriction base="xs:string">
  <xs:maxLength value=" 30 " /> 
  </xs:restriction>
  </xs:simpleType>
  </xs:element>
- <xs:element name="AddRess" minOccurs=" 0 ">
- <xs:simpleType>
- <xs:restriction base="xs:string">
  <xs:maxLength value=" 60 " /> 
  </xs:restriction>
  </xs:simpleType>
  </xs:element>
- <xs:element name="City" minOccurs=" 0 ">
- <xs:simpleType>
- <xs:restriction base="xs:string">
  <xs:maxLength value=" 15 " /> 
  </xs:restriction>
  </xs:simpleType>
  </xs:element>
- <xs:element name="regioN" minOccurs=" 0 ">
- <xs:simpleType>
- <xs:restriction base="xs:string">
  <xs:maxLength value=" 15 " /> 
  </xs:restriction>
  </xs:simpleType>
  </xs:element>
- <xs:element name="PostalCode" minOccurs=" 0 ">
- <xs:simpleType>
- <xs:restriction base="xs:string">
  <xs:maxLength value=" 10 " /> 
  </xs:restriction>
  </xs:simpleType>
  </xs:element>
- <xs:element name="Country" minOccurs=" 0 ">
- <xs:simpleType>
- <xs:restriction base="xs:string">
  <xs:maxLength value=" 15 " /> 
  </xs:restriction>
  </xs:simpleType>
  </xs:element>
- <xs:element name="PHONE" minOccurs=" 0 ">
- <xs:simpleType>
- <xs:restriction base="xs:string">
  <xs:maxLength value=" 24 " /> 
  </xs:restriction>
  </xs:simpleType>
  </xs:element>
- <xs:element name="Fax" minOccurs=" 0 ">
- <xs:simpleType>
- <xs:restriction base="xs:string">
  <xs:maxLength value=" 24 " /> 
  </xs:restriction>
  </xs:simpleType>
  </xs:element>
  </xs:sequence>
  </xs:complexType>
  </xs:element>
  </xs:choice>
  </xs:complexType>
  </xs:element>
  </xs:schema>
endtext
return lcXSD


авторесли поменять структуру, то их система не понимает наш файл.
ну что сказать, - подонки.
они, что каким-то уникальным парсером разбирают построчно?

я Вам еще раз скажу, что мне удавалось убедить и доказать,
и принимающая сторона делала то, что я им говорил.
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35921305
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
символам -
не удивляйтесь в схеме,
это прямо из командира скопировано, лениво было переделать,
сейчас подумаю как очередность вывода изменить
...
Рейтинг: 0 / 0
вывод курсора в XML файл, по определенному шаблону
    #35921366
vova_ukr_lg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
понял свою ошибку в изменении регистров тегов

в
Код: plaintext
1.
2.
3.
4.
5.
6.
FOR I= 1  TO loXT.Fields.Count
		loXF=loXT.Fields.Item(I)

		loXT.Fields.Remove(I)
		loXF.XMLName=STRCONV(UPPER(loXF.Alias), 5 )
		loXT.Fields.Add(loXF,loXF.XMLName)
	NEXT
я в ператорах указал "i", а надо было 1

хотя в исходном примере, где смотрел, было 1, но зачем то поменял.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / вывод курсора в XML файл, по определенному шаблону
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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