powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Создание курсор и заполнение из Xml-файла
11 сообщений из 11, страница 1 из 1
Создание курсор и заполнение из Xml-файла
    #35220199
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Плз. помогите...

В ветке Xml храниятся следующие данные:
Код: plaintext
Field="RU/UA/EN" ZnLang="Lang131/Lang132/Lang133"
Field - Поля которые надо создать в курсоре
ZnLang - Ссылка чем заполнить
Код: plaintext
1.
2.
     <Lang131  RU="Русский" UA="Росiйська" EN=""/>
     <Lang132  RU="Украинский" UA="Українська" EN=""/>
     <Lang133  RU="Английский" UA="Англiйська" EN=""/>
Нужно создать динамический курсор (на случай если пользователь захочет добавить язык)
Для данного примера
Код: plaintext
Create Cursor Lang(NaimRU C( 20 ),NaimUA C( 20 ),NaimEN C( 20 ),PIC C( 10 ))
и заполнить его
Код: plaintext
1.
2.
3.
4.
5.
insert into Lang(NaimRU,NaimUA,NaimEN,PIC) VALUES(NVL(_Файл( 13 ,.F.,.F.,'LangAs4.xml','Lang131','RU'),''),;
NVL(_Файл( 13 ,.F.,.F.,'LangAs4.xml','Lang131','UA'),''),;
NVL(_Файл( 13 ,.F.,.F.,'LangAs4.xml','Lang131','EN'),''),'RU')
insert into Lang(NaimRU,NaimUA,NaimEN,PIC) VALUES(NVL(_Файл( 13 ,.F.,.F.,'LangAs4.xml','Lang132','RU'),''),;
NVL(_Файл( 13 ,.F.,.F.,'LangAs4.xml','Lang132','UA'),''),;
NVL(_Файл( 13 ,.F.,.F.,'LangAs4.xml','Lang132','EN'),''),'UA')
и т. д.
NVL(_Файл(13,.F.,.F.,'LangAs4.xml','Lang131','Ru'),'') - возвращает значение ветки или NULL

Как ЭТО можно граммотно обработать...

С Ув. Игорь.
...
Рейтинг: 0 / 0
Создание курсор и заполнение из Xml-файла
    #35220257
http://forum.foxclub.ru/read.php?29,260853,264661#msg-264661

+ ищем все по теме XMLAdapter + смотрим примеры в фокспро + читаем
...
Рейтинг: 0 / 0
Создание курсор и заполнение из Xml-файла
    #35220558
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
12345вышелзайчикпогулятьhttp://forum.foxclub.ru/read.php?29,260853,264661#msg-264661

+ ищем все по теме XMLAdapter + смотрим примеры в фокспро + читаем

С XMLAdapter не работал :(...

Как говорится после вчерашнего кооперетива решил проблему...
Но САМ от такого решения испугался...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
PROCEDURE Lang
	PARAMETERS toAlias && Имя курсора для создания
	LOCAL loI, loXml, loClassNode, loFieldCursor, loNach, loLen, loZnField, loZnFieldTek, loField, loFieldRepl
	IF EMPTY(m.toAlias)
		RETURN .F.
	ENDIF
	USE IN SELECT(m.toAlias)
	m.loXml = _Файл( 11 ,'LangAs4.xml') && получить Xml-документ
	m.loClassNode = _Файл( 13 ,m.loXml,m.loXml,.F.,"IgClass",.F.,"/CREATE/") && получить Первую ветку Xml-документа
	m.loFieldCursor = 'Naim'+STRTRAN(NVL(_Файл( 13 ,m.loXml,m.loClassNode,.F.,'SpisLang','Field'),''),'/',' C(20), Naim')+' C(20)' && получить список полей
	CREATE CURSOR (m.toAlias) (LstPick C( 20 ), &loFieldCursor.) && создать курсор
	m.loZnField = NVL(_Файл( 13 ,m.loXml,m.loClassNode,.F.,'SpisLang','ZnField'),'') && поучить ветки для заполнения курсора
	m.loZnField = m.loZnField+IIF(!EMPTY(m.loZnField) AND RIGHT(m.loZnField, 1 )#'/','/','')
	FOR m.loI= 1  TO OCCURS('/',m.loZnField) && бежим и заполняем
		m.loNach = IIF(m.loI= 1 , 1 ,AT('/',m.loZnField,m.loI- 1 )+LEN('/'))
		m.loLen = IIF(m.loI= 1 ,AT('/',m.loZnField)- 1 ,AT('/',m.loZnField,m.loI)-m.loNach)
		m.loZnFieldTek = SUBSTR(m.loZnField,m.loNach,m.loLen)
		INSERT INTO (m.toAlias)(LstPick) VALUES(STRTRAN(UPPER(FIELD(RECCOUNT(m.toAlias)+ 2 ,m.toAlias)),'NAIM','')) && имя рисунка
		FOR m.loField= 2  TO FCOUNT(m.toAlias) && бежим по полям и заполняем
			m.loFieldRepl = FIELD(m.loField,m.toAlias)
			REPLACE &loFieldRepl. WITH NVL(_Файл( 13 ,m.loXml,m.loClassNode,.F.,m.loZnFieldTek,STRTRAN(UPPER(FIELD(m.loField,m.toAlias)),'NAIM','')),'') IN (m.toAlias)
		ENDFOR
	ENDFOR
ENDPROC
Получил файл:
Код: plaintext
1.
2.
3.
"RU""Русский""Росiйська"""
"UA""Украинский""Українська"""
"EN""Английский""Англiйська"""
Может кто укажет правильный путь...
Как обработать файл через XMLAdapter...
Кусок файла:
Код: plaintext
1.
2.
3.
4.
5.
6.
<?xml version="1.0" encoding="WINDOWS-1251"?>
  <IgClass>
     <SpisLang Field="RU/UA/EN" ZnField="Lang131/Lang132/Lang133"/>
     <Lang131  RU="Русский" UA="Росiйська" EN=""/>
     <Lang132  RU="Украинский" UA="Українська" EN=""/>
  </IgClass>

С Ув. Игорь.
...
Рейтинг: 0 / 0
Создание курсор и заполнение из Xml-файла
    #35220582
автор
Как говорится после вчерашнего кооперетива решил проблему...
Но САМ от такого решения испугался...


с сапогом на саблю

ну, хозяин - барин
...
Рейтинг: 0 / 0
Создание курсор и заполнение из Xml-файла
    #35220599
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
12345вышелзайчикпогулятьс сапогом на саблю

ну, хозяин - барин

С XMLAdapter не работал :(...

Может кто укажет правильный путь...
Как обработать файл через XMLAdapter...
...
Рейтинг: 0 / 0
Создание курсор и заполнение из Xml-файла
    #35220629
сначала примеры в солюшиах смотрите,
затем поиском ...,
ну я же написал

без труда рыбку не скушаешь
...
Рейтинг: 0 / 0
Создание курсор и заполнение из Xml-файла
    #35220673
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
12345вышелзайчикпогулятьсначала примеры в солюшиах смотрите,
затем поиском ...,
ну я же написал

без труда рыбку не скушаешь

На своем примере быстрее врублюсь че НАДЪ и КУДА..
Соответственно и рыбку сегодня СОЖРУ...

А не буду мастерить удочку(колесо)...
Да еще и из граблей... На которые наступлю...
Хорошо если один раз... :) ;)

Не уж много писанины чеБ такой просто ХМЛ разобрать...
Или такой формат не подходит...
Код: plaintext
1.
2.
3.
4.
5.
<?xml version="1.0" encoding="WINDOWS-1251"?>
  <IgClass>
     <SpisLang Field="RU/UA/EN" ZnField="Lang131/Lang132/Lang133"/>
     <Lang131  RU="Русский" UA="Росiйська" EN=""/>
     <Lang132  RU="Украинский" UA="Українська" EN=""/>
  </IgClass>

С Ув. Игорь.
...
Рейтинг: 0 / 0
Создание курсор и заполнение из Xml-файла
    #35220790
автор
А не буду мастерить удочку(колесо)...


не понял

Вы считаете парсер колесом, а Ваши скачки с разбором
по файлу тупо в лоб хорошим решением?

авторНа своем примере быстрее врублюсь че НАДЪ и КУДА..

однако,
я Вам еще раз советую начат с азов,
прочитать для чего этот формат придуман

не вводите сообщество в ступор,
изучайте формат и парсеры
...
Рейтинг: 0 / 0
Создание курсор и заполнение из Xml-файла
    #35220837
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
12345вышелзайчикпогулятьне понял

Вы считаете парсер колесом, а Ваши скачки с разбором
по файлу тупо в лоб хорошим решением?

Я и не говорю что ЭТО хорошее решение...
Просто хочу тоб кто-НИБУДЬ поделился своей наработкой(уже работающей) по XMLAdapter...

А с Азов начинать изучать...
Эт вспоминать как КОГДА-ТО меня учили...
Нарисовали на доске НЕпонятный код и кричать че ОН работает...
Потом выясняется че НАДЪ взятЪ бубен и немного ПОшаманить чеБ он заработал...

Тебе скажут какой ты молодец...
И че под твою задачу ЭТОТ код ПОДХОДИТ КАК ДЕТИ В ШКОЛУ...

И ТОЛЬКО СО ВРЕМЕНЕМ И ТАНЦАМИ С БУБНОМ...
Начинаешь понимать ЧЕ жизнь сложная штука...

Плз... пример разбора Xml (XMLAdapter-ом)
Код: plaintext
1.
2.
3.
4.
5.
<?xml version="1.0" encoding="WINDOWS-1251"?>
  <IgClass>
     <SpisLang Field="RU/UA/EN" ZnField="Lang131/Lang132/Lang133"/>
     <Lang131  RU="Русский" UA="Росiйська" EN=""/>
     <Lang132  RU="Украинский" UA="Українська" EN=""/>
  </IgClass>

С Ув. Игорь.
...
Рейтинг: 0 / 0
Создание курсор и заполнение из Xml-файла
    #35220872
авторнаработкой(уже работающей) по XMLAdapter...


я же показал - в солюшинах

do (home()+"samples\solution\solution.app")

там есть кнопочка посмотреть код
...
Рейтинг: 0 / 0
Создание курсор и заполнение из Xml-файла
    #35222326
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
12345вышелзайчикпогулятья же показал - в солюшинах

do (home()+"samples\solution\solution.app")

там есть кнопочка посмотреть кодСмотрел примеры...

12345вышелзайчикпогулятьhttp://forum.foxclub.ru/read.php?29,260853,264661#msg-264661Просмотрел ОБСУЖДЕНИЕ...

Все равно не понял в чем прелесть XMLAdapter...
А еще мне НЕнравить функция Cursortoxml...
Просмотривать выходной файл слишком напряжно...
ХотЪ он и структурирован...

А если надо разобрать XML заточенный под определенную задачу...
Плюс привык УСЕ перебирать РУЦЯМИ :)...

На основе своей ТРАБЛЫ смастерил проги CursToXml и XmlToCurs
МОНА ПИНАТЬ НОГАМИ, А ТАКЖЕ ПОКАЗАТЬ ПРЕЛЕСТЬ XMLAdapter...
Код: 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.
PROCEDURE XmlToCurs
	PARAMETERS toStrCreate, toCurXml, toXmlFile
	LOCAL loI, loXml, loClassNode, loField( 1 ), loRow, loAlias, loFieldRepl
	m.toStrCreate = IIF(EMPTY(toStrCreate),'Create Cursor '+m.toCurXml,m.toStrCreate)
	m.loXml = _Файл( 11 ,m.toXmlFile,.T.) && получить Xml-документ
	m.loClassNode = _Файл( 13 ,m.loXml,m.loXml,.F.,"IgClass",.F.,"/CREATE/") && получить Первую ветку Xml-документа
	m.loFieldCursor = NVL(_Файл( 13 ,m.loXml,m.loClassNode,.F.,'ZnField','Struc'),'') && получить список полей
	IF EMPTY(m.toStrCreate) OR EMPTY(m.loFieldCursor)
		RETURN
	ENDIF
	m.loAlias = ALIAS()
	USE IN SELECT(m.toCurXml)
	&toStrCreate. (&loFieldCursor.)
	AFIELDS(m.loField,m.toCurXml)
	_baza( 6 ,m.loAlias)
	FOR m.loRow= 1  TO VAL(NVL(_Файл( 13 ,m.loXml,m.loClassNode,.F.,'ZnField','KolRow'),''))
		APPEND BLANK IN m.toCurXml
		FOR m.loI= 1  TO ALEN(m.loField, 1 )
			m.loFieldRepl = FIELD(m.loI,m.toCurXml)
			REPLACE &loFieldRepl. WITH _переменные( 2 ,NVL(_Файл( 13 ,m.loXml,m.loClassNode,.F.,"Row"+ALLTRIM(STR(m.loRow)),m.loFieldRepl),''),.F.,m.loFieldRepl,m.toCurXml) IN (m.toCurXml)
		ENDFOR
	ENDFOR
ENDPROC

PROCEDURE CursToXml
	PARAMETERS toCurXml, toXmlFile
	LOCAL loI, loXml, loClassNode, loField( 1 ), loColZap, loAlias, loZn
	IF !USED(m.toCurXml) &&OR EMPTY(m.toXmlFile)
		RETURN .F.
	ENDIF
	STORE '' TO m.loStrucCursor
	STORE  1  TO m.loColZap
	m.loXml = _Файл( 11 ,'',.T.) && получить Xml-документ
	m.loClassNode = _Файл( 13 ,m.loXml,m.loXml,.F.,"IgClass",.F.,"/CREATE/") && получить Первую ветку Xml-документа
	AFIELDS(m.loField,m.toCurXml)
	FOR m.loI= 1  TO ALEN(m.loField, 1 )
		m.loStrucCursor = m.loStrucCursor+IIF(!EMPTY(m.loStrucCursor),',','')+m.loField[m.loI, 1 ]+' '+m.loField[m.loI, 2 ]+;
			IIF(!EMPTY(m.loField[m.loI, 3 ]) or !EMPTY(m.loField[m.loI, 4 ]),'('+ALLTRIM(STR(m.loField[m.loI, 3 ])),'')+;
			IIF(!EMPTY(m.loField[m.loI, 4 ]),','+ALLTRIM(STR(m.loField[m.loI, 4 ])),'')+IIF(!EMPTY(m.loField[m.loI, 3 ]) or !EMPTY(m.loField[m.loI, 4 ]),')','')
	ENDFOR
	m.loAlias = ALIAS()
	SELECT (m.toCurXml)
	SCAN
		FOR m.loI= 1  TO ALEN(m.loField, 1 )
			DO CASE
				CASE INLIST(m.loField[m.loI, 2 ],"C","M")
					m.loZn = ALLTRIM(EVALUATE(m.toCurXml+'.'+FIELD(m.loI,m.toCurXml)))
				CASE m.loField[m.loI, 2 ]="D"
					m.loZn = DTOC(EVALUATE(m.toCurXml+'.'+FIELD(m.loI,m.toCurXml)))
				CASE m.loField[m.loI, 2 ]="T"
					m.loZn = TTOC(EVALUATE(m.toCurXml+'.'+FIELD(m.loI,m.toCurXml)))
				OTHERWISE
					m.loZn = EVALUATE(m.toCurXml+'.'+FIELD(m.loI,m.toCurXml))
			ENDCASE
			_Файл( 14 ,m.loClassNode,_Файл( 13 ,m.loXml,m.loClassNode,.F.,"Row"+ALLTRIM(STR(m.loColZap)),FIELD(m.loI,m.toCurXml),m.loZn))
		ENDFOR
		m.loColZap = m.loColZap+ 1 
	ENDSCAN
	m.loColZap = m.loColZap- 1 
	_Файл( 14 ,m.loClassNode,_Файл( 13 ,m.loXml,m.loClassNode,.F.,"ZnField","Struc",m.loStrucCursor))
	_Файл( 14 ,m.loClassNode,_Файл( 13 ,m.loXml,m.loClassNode,.F.,"ZnField","KolRow",m.loColZap))
	_baza( 6 ,m.loAlias)
	_Файл( 14 ,m.loXml,m.loClassNode)
	_Файл( 12 ,m.loXml,m.toXmlFile)
ENDPROC
Ветка ZnField - где хранится инфа структура/количетсво переданной инфы...
_Файл с параметром 11 открывает Xml-файл или создает объект Xml...
_Файл с параметром 12 сохраняет Xml в файл...
_Файл с параметром 13 считывает/записывает данные из/в XmlNode
_Файл с параметром 14 добавляет родителю ветку-дитя :)
Тестировал на данном XML(курсоре):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<?xml version="1.0" encoding="WINDOWS-1251"?>
  <IgClass>
     <Row1 SS="0" A="1-3" A1="1-1" SS2="asrfswfr" ADF="1.02" ASDAS="  /  /  " ASD="  /  /     :  :   AM"/>
     <Row2 SS="0" A="1-5" A1="1-3" SS2="" ADF="0" ASDAS="  /  /  " ASD="  /  /     :  :   AM"/>
     <Row3 SS="0" A="1-3-1" A1="1-4" SS2="" ADF="0" ASDAS="  /  /  " ASD="  /  /     :  :   AM"/>
     <Row4 SS="0" A="1-4-7" A1="1" SS2="" ADF="1.03" ASDAS="10/01/01" ASD="  /  /     :  :   AM"/>
     <Row5 SS="0" A="1-4" A1="2" SS2="" ADF="0" ASDAS="  /  /  " ASD="  /  /     :  :   AM"/>
     <Row6 SS="0" A="1-2" A1="3" SS2="qwefaf" ADF="0" ASDAS="  /  /  " ASD="  /  /     :  :   AM"/>
     <Row7 SS="0" A="1-10" A1="6" SS2="" ADF="0" ASDAS="  /  /  " ASD="01/01/01 10:00:02 AM"/>
     <Row8 SS="0" A="2-1" A1="4" SS2="" ADF="0" ASDAS="  /  /  " ASD="  /  /     :  :   AM"/>
     <Row9 SS="0" A="2-4" A1="8" SS2="" ADF="0" ASDAS="  /  /  " ASD="  /  /     :  :   AM"/>
     <Row10 SS="0" A="1-3-6" A1="1-5" SS2="" ADF="0" ASDAS="  /  /  " ASD="  /  /     :  :   AM"/>
     <Row11 SS="0" A="1-3-7" A1="7" SS2="" ADF="0" ASDAS="  /  /  " ASD="  /  /     :  :   AM"/>
     <Row12 SS="0" A="1-2-1" A1="9" SS2="" ADF="0" ASDAS="  /  /  " ASD="  /  /     :  :   AM"/>
     <Row13 SS="0" A="1-3" A1="2-2" SS2="" ADF="0" ASDAS="  /  /  " ASD="  /  /     :  :   AM"/>
     <Row14 SS="0" A="1-3" A1="2-1" SS2="" ADF="0" ASDAS="  /  /  " ASD="  /  /     :  :   AM"/>
     <ZnField Struc="SS N(1),A C(10),A1 C(20),SS2 M(4),ADF N(10,2),ASDAS D(8),ASD T(8)" KolRow="14"/>
  </IgClass>
С Ув. Игорь.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Создание курсор и заполнение из Xml-файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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