On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
администратор




Пост N: 5883
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.07.16 14:30. Заголовок: Снова XML


Нужно создавать / читать XML в UTF-16
Что есть в этом плане в Harbour ?

Минимум нужно корректное чтение !

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 61 , стр: 1 2 3 4 All [только новые]


постоянный участник


Пост N: 1236
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 16.07.16 11:23. Заголовок: Щас посмотрел на мет..


Щас посмотрел на метод find(). По-моему, что-то там не так с логикой сканирования массива ::aItems. При первом же несовпадении цикл завершается и никакого find не получается) Или я не туда смотрю?))

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1096
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.16 13:11. Заголовок: PSP пишет По-моему,..


PSP пишет
 цитата:
По-моему, что-то там не так с логикой сканирования массива ::aItems.


там все норма. Надо сначала получать "DATA" в него вложены другие тэги, т.е.
o := oXml:Find("DATA", 1)
o := o:Find("CONSTANTS", 1)
...
т.е.
For i := 1 To len(oXml:aItems)
o := oXml:aItems[ i ]
? o:ClassName, o:title
Next
o := oXml:Find("DATA", 1)
For i := 1 To len(o)
o2 := o:aItems[ i ]
? o2:ClassName, o2:title
Next


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1097
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.16 13:13. Заголовок: PS так надо For i :=..


PS
так надо
For i := 1 To len(o:aItems)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1237
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 16.07.16 13:26. Заголовок: SergKis пишет: Над..


SergKis пишет:

 цитата:
Надо сначала получать "DATA" в него вложены другие тэги


Ну да, как-то так...))

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5891
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.07.16 14:29. Заголовок: SergKis Да заработа..


SergKis
Да заработало , спасибо
Но дальше у меня снова затык
 
oXml := HXMLDoc():Read( hb_DirBase()+"test.xml" )

o:=oXml:find("DATA",1)
o:=o:find("CONSTANTS",1)
o:=o:find("ELEMENTS")


For i := 1 To len(o:aitems)
j := o:aItems[ i ]
? j:ClassName, j:title // HXMLNODE ITEM
Next


Хотелось бы считать значения GUID и Value из всех полученных семи ITEM. Как ?

И еще вопрос , слышал что XML не любит какие то символы.
Какие и на что их менять ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1238
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 16.07.16 14:35. Заголовок: Dima пишет: Хотелос..


Dima пишет:

 цитата:
Хотелось бы считать значения GUID и Value из всех полученных семи ITEM. Как ?


Они находятся в массиве aAttr, т.е. в примере это будет o:aAttr


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5892
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.07.16 14:43. Заголовок: Да я уже понял , опе..


Да я уже понял , опередил.
Я так понимаю это не HASH массив и поэтому юзать надо цифры
и что типа такого не прокатит j:aattr["GUID"]

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1239
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 16.07.16 14:48. Заголовок: Да, обычный массив..


Да, обычный массив

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5893
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.07.16 14:49. Заголовок: PSP пишет: Да, обыч..


PSP пишет:

 цитата:
Да, обычный массив


Печаль , с HASH было бы веселее.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1098
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.16 15:15. Заголовок: Dima ишет поэтому ю..


Dima ишет
 цитата:
поэтому юзать надо цифры


чем не устраивает
 
METHOD GetAttribute( cName, cType, xDefault ) CLASS HXMLNode
Local i := Ascan( ::aAttr,{|a|a[1]==cName} )

IF i != 0
IF cType == Nil .OR. cType == "C"
Return ::aAttr[ i,2 ]
ELSEIF cType == "N"
Return Val( ::aAttr[ i,2 ] )
ELSEIF cType == "L"
Return ( Lower( ::aAttr[ i,2 ] ) $ ".t.;on;yes;true" )
ENDIF
ENDIF
Return xDefault

?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5894
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.07.16 15:24. Заголовок: SergKis пишет: чем ..


SergKis пишет:

 цитата:
чем не устраивает


Да устраивает
Не подумал сразу об этом методе............жара..

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5895
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.07.16 16:57. Заголовок: Что то меня запарило..


Что то меня запарило писать
o:=oXml:find("DATA")
// тут делать проверки
o:=o:find("CONSTANTS")
// тут делать проверки
o:=o:find("ELEMENTS")
// тут делать проверки

Накидал SeekXML (если уже что то есть в этом плане , ткните носом )
 
Func SeekXML(oXml,aTitle,apos)
local o ,j:=0

if apos==NIL
apos:=Array( len(aTitle) )
apos:=Afill(apos,1)
endif

do while j < len(aTitle)
++j
if j==1
o:=oXml:find( aTitle[ 1 ],apos[ 1 ])
if empty(o)
return nil
endif
else
o:=o:find( aTitle[ j ],apos[ j ])
if empty(o)
return nil
endif
endif
enddo
return o


Пример вызова
OX:=SeekXML(oXml,{"DATA","CONSTANTS","ELEMENTS"})
а далее потрошим объект OX на атрибуты , предварительно проверив что OX не NIL

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1099
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.16 17:40. Заголовок: Dima Цель обработки..


Dima
Цель обработки xml ?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5896
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.07.16 17:49. Заголовок: SergKis пишет: Цель..


SergKis пишет:

 цитата:
Цель обработки xml ?


Выбрать нужные данные и затем сложить их в общую базу.


По ходу не понял как верно преобразовать XML из UTF-16 в UTF-8
Пробовал так
HB_STRTOUTF8( WIN_WIDETOANSI(hb_MemoRead(hb_DirBase()+"test16.xml")) ,"RU1251")
Все как бы нормально , но в самом конце добавилось целая куча вопросиков , примерно 7 тыщ штук ))

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1100
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.16 18:13. Заголовок: Dima пишет Выбрать н..


Dima пишет
 цитата:
Выбрать нужные данные и затем сложить их в общую базу.


через рабочий файл или сразу в базу ?

 цитата:
Пример вызова
OX:=SeekXML(oXml,{"DATA","CONSTANTS","ELEMENTS"})


какой запрос будет здесь
 
<DOCUMENTS>
<DOCUMENT GUID="E01E1F5C-D6E4-46E8-B923-3758B0D79BDE" Comment="Заказы" >

<ELEMENTS>
<ITEM GUID="E9752AD9-17DB-489F-E40F-B0B72D211628" dt="2011-05-26T17:58:02" IsDeleted="0" IsPost="0" DocNumber="ТДАБ0002" A01="6894BE95-972E-4BDB-B7D3-84D7F378EA2F" A02="BD72D900-55BC-11D9-848A-00112F43529A" A06="0.00" A08="0.00" A09="0.000" A010="2011-05-26T11:34:55" A011=""/>
<ITEM GUID="F28210DD-F7DB-4428-A5A6-BFDD69F71978" dt="2011-06-03T14:43:28" IsDeleted="0" IsPost="1" DocNumber="ТДАБ0003" A01="6894BE95-972E-4BDB-B7D3-84D7F378EA2F" A02="BD72D900-55BC-11D9-848A-00112F43529A" A03="CBCF494B-55BC-11D9-848A-00112F43529A" A04="5669DC72-64A6-11DF-B11F-001921430A4C" A05="CBCF494C-55BC-11D9-848A-00112F43529A" A06="3.00" A07="CBCF495D-55BC-11D9-848A-00112F43529A" A08="6057.83" A09="0.000" A010="2011-06-03T14:42:42" A011="">
<TABLES>
...


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5897
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.07.16 18:44. Заголовок: SergKis пишет: чере..


SergKis пишет:

 цитата:
через рабочий файл или сразу в базу ?


собираю во временном а затем в базу

SergKis пишет:

 цитата:
какой запрос будет здесь


Дорабатывать надо SeekXML

А что насчет UTF16 в UTF8 что бы без косяков ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1101
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.16 19:12. Заголовок: Dima пишет А что нас..


Dima пишет
 цитата:
А что насчет UTF16 в UTF8 что бы без косяков ?


думал так
1. сетавим cdp utf16
s := hb_memowrit("test.xml")
hb_memowrit("tutf8.xml", hb_StrToUtf8(s))
2. сетавим cdp ru1251
читаем "tutf8.xml" в oXml и работаем, там где читаем данные символьные делаем hb_Utf8ToStr(), как показывал в функции Get_Value(...)
Dima пишет
 цитата:
собираю во временном а затем в базу
Дорабатывать надо SeekXML


т.е.
1. надо тегам, атрибутам поставить в соотв. файл, структуру
2. завести обработчики для записи из xml в соотв. файл, поле (возможно с valid-ом, range) получ. данных
может пойти др. путем (тут hash подйдет)
1. поставить соотв. тег, атрибут - структуре поля
2. поставить соотв. тег, атрибут блоку кода, передавая ьуда объект тега
3. тогда просто обходим все обекты - создаем временные, открываем dbf с алиасом тега например
4. повторный обход для выполнения блоков кода по переносу в dbf данных блоками кода, передавая туда объкт с атрибутами




Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5898
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.07.16 21:34. Заголовок: SergKis пишет: дума..


SergKis пишет:

 цитата:
думал так


Это не работает. Только ты ошибся . У меня на входе XML в кодировке UTF-16 (utf-16 little endian)
и его (данные из него) надо преобразовать в любую читаемую кодировку
и читать его как XML.
Вариант с WIN_WIDETOANSI(hb_MemoRead(hb_DirBase()+"test16.xml")) работает , но ,
куча вопросиков рождается в самом конце (писал выше).
Дурдом с этим UTF-16......



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1102
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.16 21:41. Заголовок: Dima пишет на входе..


Dima пишет
 цитата:
на входе XML в кодировке UTF-16


я думал сам файл. Тогда надо перекодировать только данные строк с Utf16
пробни с oXml выдернуть GUID значение и перевести только его WIN_WIDETOANSI

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5899
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.07.16 21:49. Заголовок: а есть разница Серге..


а есть разница Сергей ?
переводить только нужную строку (значение) или весь файл с помощью WIN_WIDETOANSI
попробую , но что мне кажется что будет глючить.
отпишу...
Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 61 , стр: 1 2 3 4 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 383
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет