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

В ветке 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
28.03.2008, 12:04
    #35220257
Создание курсор и заполнение из Xml-файла
http://forum.foxclub.ru/read.php?29,260853,264661#msg-264661

+ ищем все по теме XMLAdapter + смотрим примеры в фокспро + читаем
...
Рейтинг: 0 / 0
28.03.2008, 13:02
    #35220558
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание курсор и заполнение из Xml-файла
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
28.03.2008, 13:06
    #35220582
Создание курсор и заполнение из Xml-файла
автор
Как говорится после вчерашнего кооперетива решил проблему...
Но САМ от такого решения испугался...


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

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

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

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

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

без труда рыбку не скушаешь
...
Рейтинг: 0 / 0
28.03.2008, 13:26
    #35220673
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание курсор и заполнение из Xml-файла
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
28.03.2008, 13:50
    #35220790
Создание курсор и заполнение из Xml-файла
автор
А не буду мастерить удочку(колесо)...


не понял

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

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

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

не вводите сообщество в ступор,
изучайте формат и парсеры
...
Рейтинг: 0 / 0
28.03.2008, 14:01
    #35220837
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание курсор и заполнение из Xml-файла
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
28.03.2008, 14:12
    #35220872
Создание курсор и заполнение из Xml-файла
авторнаработкой(уже работающей) по XMLAdapter...


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

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

там есть кнопочка посмотреть код
...
Рейтинг: 0 / 0
29.03.2008, 12:22
    #35222326
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание курсор и заполнение из Xml-файла
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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Создание курсор и заполнение из Xml-файла / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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