XML C8 - не понял...
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
XML C8 - не понял...
Сразу скажу - в Кларионе с ХМЛ ни разу не работал. Поэтому прошу помощи и советов.... Задача - закачать ХМЛ документ в память и работать с нодами, читая атрибуты и значения элементов. То есть документ примерно такой
< ?xml version="1.0" encoding="как там 1251"?>
<database attr1="val1">
<element attr2="val" attr3="val">
<e1>val1</el1>
<el2> val2</ el2>
</element>
</database>
В комплекте Клариона есть документ pdf с руководством, как работать с классом XML. Из этого документа выходит, что парсер XML клариона не может разбирать документы в которых присутствует смешение атрибутов и элементов. Это раз. Второе - с грехом пополам удалось подключить класс xml в тестовый проект (т.к. в этом документе нифига не сказано, как это делать), но при загрузке xml документа в... забыл, как это называется? что-то типа xmlExchancer (прошу прощения, клары под рукой нет) вылетают ошибки даже на элементарном документе. Выясняется, что в заголовке ХМЛ нельзя указывать кодировку! парсер не понимает этого! ну что за хрень! Кстати, то же руководство это подтверждает, что, мол, загрузить можно только то, что создано тем же классом!
Вопрос! Скорее всего ищу не то, не там и как всегда не так! Но как штатными средствами клариона 8 прочитать документ вышеобозначенной структуры??!
< ?xml version="1.0" encoding="как там 1251"?>
<database attr1="val1">
<element attr2="val" attr3="val">
<e1>val1</el1>
<el2> val2</ el2>
</element>
</database>
В комплекте Клариона есть документ pdf с руководством, как работать с классом XML. Из этого документа выходит, что парсер XML клариона не может разбирать документы в которых присутствует смешение атрибутов и элементов. Это раз. Второе - с грехом пополам удалось подключить класс xml в тестовый проект (т.к. в этом документе нифига не сказано, как это делать), но при загрузке xml документа в... забыл, как это называется? что-то типа xmlExchancer (прошу прощения, клары под рукой нет) вылетают ошибки даже на элементарном документе. Выясняется, что в заголовке ХМЛ нельзя указывать кодировку! парсер не понимает этого! ну что за хрень! Кстати, то же руководство это подтверждает, что, мол, загрузить можно только то, что создано тем же классом!
Вопрос! Скорее всего ищу не то, не там и как всегда не так! Но как штатными средствами клариона 8 прочитать документ вышеобозначенной структуры??!
-------------------------------
В истинном золоте блеска нет...
В истинном золоте блеска нет...
- Дед Пахом
- Старичок
- Сообщения: 3133
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
XML C8 - не понял...
тут за последние полгода столько про xml понаписано... Поищи. Сам я юзаю свой EasyXML, так что не помощник.
С уважением, ДП
XML C8 - не понял...
ну... вообще-то я стараюсь следовать правилам хорошего тона, которые гласят, что прежде чем задать вопрос, надо воспользоваться поиском... увы, ничего путного не нашел... фишка в том, что низзя пользовать сторонние продукты, только чистый кларик. ну на крайняк бесплатный софт с открытыми исходниками. но это на самый крайняк!..
-------------------------------
В истинном золоте блеска нет...
В истинном золоте блеска нет...
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
XML C8 - не понял...
Странно. Ну вот же тема, в которой только что обсуждали вопрос: http://forum.clarionlife.net/phpbb/view ... f=1&t=3383
Загружать можно XML файлы созданные где угодно (какая разница ?!), но кодировка только UTF-8 (это обходится, см. тему по ссылке)
Не помню уже про C8, но в C91 в Examples есть пример выгрузки / загрузки XML - начни с него. Все прекрасно работает.
Описание в PDF - ископаемое для C63, в нем не совпадают прототипы методов для работы с XML, отсюда и ошибки.
Лучше см. описание методов в исходниках LibSrc.
Решение задачи можно на порядок упростить используя бесплатную библиотеку iQXML http://www.paresi.net/clarion/index.html
К сожалению без исходников ...
Загружать можно XML файлы созданные где угодно (какая разница ?!), но кодировка только UTF-8 (это обходится, см. тему по ссылке)
Не помню уже про C8, но в C91 в Examples есть пример выгрузки / загрузки XML - начни с него. Все прекрасно работает.
Описание в PDF - ископаемое для C63, в нем не совпадают прототипы методов для работы с XML, отсюда и ошибки.
Лучше см. описание методов в исходниках LibSrc.
Это конечно можно, но придется работать. Много работать.Aragorn писал(а):фишка в том, что низзя пользовать сторонние продукты, только чистый кларик.
Решение задачи можно на порядок упростить используя бесплатную библиотеку iQXML http://www.paresi.net/clarion/index.html
К сожалению без исходников ...
За теми кто отстал - не возвращаться. (С) Кодекс
XML C8 - не понял...
Много раз писал, как это делать средствами Клариона, надо поискать в Clalist или здесь, на форуме
XML C8 - не понял...
а еще нашел в исходниках класс QuickXMLParser. Ради интереса привинтил к проекту, зарядил туда ХМЛ на 18 метров (600000 строк, шестьсот тысяч, прописью) - фигли, написано же - квик!!! и-... понял, что автор, видимо, был с юмором. Парсинг шел около 2,5 часов. Для примера - тот же ХМЛ файл в дельфях распарсился за 6 секунд!!!
Аааааа........
Аааааа........
-------------------------------
В истинном золоте блеска нет...
В истинном золоте блеска нет...
XML C8 - не понял...
А попробуй шаблон View XML (например, на обработчик по кнопке) для своего файла...
Правда, работает правильно только для UTF-8, придётся преобразовать для начала.
Если время разумное, можно двигаться дальше
Правда, работает правильно только для UTF-8, придётся преобразовать для начала.
Если время разумное, можно двигаться дальше
XML C8 - не понял...
Попробую в понедельник...
-------------------------------
В истинном золоте блеска нет...
В истинном золоте блеска нет...
XML C8 - не понял...
1. Разбирать может.Aragorn писал(а): Из этого документа выходит, что парсер XML клариона не может разбирать документы в которых присутствует смешение атрибутов и элементов. Это раз. Второе - с грехом пополам удалось подключить класс xml в тестовый проект (т.к. в этом документе нифига не сказано, как это делать), но при загрузке xml документа в... забыл, как это называется? что-то типа xmlExchancer (прошу прощения, клары под рукой нет) вылетают ошибки даже на элементарном документе. Выясняется, что в заголовке ХМЛ нельзя указывать кодировку! парсер не понимает этого! ну что за хрень! Кстати, то же руководство это подтверждает, что, мол, загрузить можно только то, что создано тем же классом!
Вопрос! Скорее всего ищу не то, не там и как всегда не так! Но как штатными средствами клариона 8 прочитать документ вышеобозначенной структуры??!
2. Для подключения лучше всего где-нибудь в тёмном углу вызвать шаблон View XML и всё подключится
3. Парсер нормально принимает UTF-8 и ISO-8859-1, но можно 16-ричными редактором поменять ISO-8859-1 на Windows-1251 (там на 1 символ больше, не забываем <0> в конце строки), тогда по-русски будет кушать...
Пока скачай класс cstr, для работы с длинными строками и перекодировки в UTF-8, пригодится
https://mega.co.nz/#!RlAilJIT!2hvwWBkAn ... J3FmCLcmvw
Код: Выделить всё
Include('cstr.inc')
...
CS Cstr
....
CS.LoadFromfile(XMLFile)
WinPos#=Instring('"WINDOWS-1251"',Upper(CS.S[1:60],1,1)
If WinPos#
CS.S[WinPos : WinPos+13]='"UTF-8"'
CS.ToUtf8()
End
CS.SavetoFile(UTF8File)
Продолжу завтра, если лучше вариантов не найдётся.
XML C8 - не понял...
В общем дело продвинулось следующим образом. Класс ViewXML действительно работает с большим файлом почти с той же скоростью, что и парсер MS. Ну в целом приемлемо. Изучив класс, нарисовал такой тестовый пример:
Код работает, файл парсится, но все упирается в кодировку. Завтра буду пробовать предложенный Юрием способ перегона Windows-1251 в UTF-8, а на данный момент могу констатировать следующее.
1. Файл XML в формате Win-1251 гарантированно приводит к AV
2. Даже если файл XML в UTF-8, но в заголовке указано Win1251, AV гарантирован
3. Если файл XML в UTF-8 и в заголовке кодировка не указана, или указана UTF-8, файл парсится, все ноды со всеми значениями и атрибутами заносятся в очередь (которую потом пользует тот самый шаблон ViewXML), но!!!! ВМЕСТО РУССКОГО ТЕКСТА ПОЛНАЯ АБРАКАБАБРА!!! Хотя тот же файл через Internet Explorer, Notepad++. Oxygen и пр.пр.пр. смотрится вполне читаемым! Что не так? Повторюсь, перегнать Win-1251 в UTF-8 предложенным выше способом обязательно попробую, но може еще какие варианты подбросите, чтобы завтра не буксовать?
Код: Выделить всё
Doc &Document
QXML Queue(DOMQueue)
End
Code
Doc &= XMLFileToDom(fName)
FillDOMQueue(Doc, QXML)
Loop I# = To Records(QXML)
Get(QXML, I#)
Stop(QXML.Level & ' - ' & QXML.node.GetNodeName() & ' - ' & QXML.node.GetNodeValue() & ' - ' & QXML.node.GetNodeType())
End
If not Doc &= null then Doc.Release() End
1. Файл XML в формате Win-1251 гарантированно приводит к AV
2. Даже если файл XML в UTF-8, но в заголовке указано Win1251, AV гарантирован
3. Если файл XML в UTF-8 и в заголовке кодировка не указана, или указана UTF-8, файл парсится, все ноды со всеми значениями и атрибутами заносятся в очередь (которую потом пользует тот самый шаблон ViewXML), но!!!! ВМЕСТО РУССКОГО ТЕКСТА ПОЛНАЯ АБРАКАБАБРА!!! Хотя тот же файл через Internet Explorer, Notepad++. Oxygen и пр.пр.пр. смотрится вполне читаемым! Что не так? Повторюсь, перегнать Win-1251 в UTF-8 предложенным выше способом обязательно попробую, но може еще какие варианты подбросите, чтобы завтра не буксовать?
-------------------------------
В истинном золоте блеска нет...
В истинном золоте блеска нет...
XML C8 - не понял...
Привет всем!
Aragorn писал:
По поводу пункта 3 - так и должно быть А не то что ожидаешь
Дело в том, что парсер загоняет информацию в очередь из файла XML в той кодировке в которой она существует в исходном виде (именно в кодировке UTF-8) а правильно отображать кириллицу на экран Clarion может только в кодировке Windows CP1251 так как нет поддержки Unicode как например в Embarcadero Delphi - C++ Builder или Microsoft Visual Studio.
У меня проблема, аналогичная пункту 3 Aragorn-а была когда применял шаблон
iQXML Роберта Пареси http://www.paresi.net/clarion/index.html
Файла XML который был в кодировке UTF-8 - Altova Spy – отображает без проблем а вот в приложении Clarion кириллица абракадаброй (кракозябрами)
Моё мнение такое - для профессионалов проблем с парсингом XML на Clarion уже нет - но у них либо свои проверенные решения, либо хорошие платные шаблоны
А вот новичкам с XML тяжеловато
У меня например, файл для парсинга с кодировкой DOS <?xml version = "1.0" encoding="CP866"?>
Как и писал Aragorn
Aragorn писал:
Полностью согласен с Aragorn-ом что с парсингом XML в Clarion на начальном этапе есть некоторые проблемы пока сам не пройдёшь все этапы и не разберёшьсяКод работает, файл парсится, но все упирается в кодировку. Завтра буду пробовать предложенный Юрием способ перегона Windows-1251 в UTF-8, а на данный момент могу констатировать следующее.
1. Файл XML в формате Win-1251 гарантированно приводит к AV
2. Даже если файл XML в UTF-8, но в заголовке указано Win1251, AV гарантирован
3. Если файл XML в UTF-8 и в заголовке кодировка не указана, или указана UTF-8, файл парсится, все ноды со всеми значениями и атрибутами заносятся в очередь (которую потом пользует тот самый шаблон ViewXML), но!!!! ВМЕСТО РУССКОГО ТЕКСТА ПОЛНАЯ АБРАКАБАБРА!!! Хотя тот же файл через Internet Explorer, Notepad++. Oxygen и пр.пр.пр. смотрится вполне читаемым! Что не так? Повторюсь, перегнать Win-1251 в UTF-8 предложенным выше способом обязательно попробую, но може еще какие варианты подбросите, чтобы завтра не буксовать?
По поводу пункта 3 - так и должно быть А не то что ожидаешь
Дело в том, что парсер загоняет информацию в очередь из файла XML в той кодировке в которой она существует в исходном виде (именно в кодировке UTF-8) а правильно отображать кириллицу на экран Clarion может только в кодировке Windows CP1251 так как нет поддержки Unicode как например в Embarcadero Delphi - C++ Builder или Microsoft Visual Studio.
Данные приложения поддерживают UnicodeХотя тот же файл через Internet Explorer, Notepad++. Oxygen и пр.пр.пр.
У меня проблема, аналогичная пункту 3 Aragorn-а была когда применял шаблон
iQXML Роберта Пареси http://www.paresi.net/clarion/index.html
Файла XML который был в кодировке UTF-8 - Altova Spy – отображает без проблем а вот в приложении Clarion кириллица абракадаброй (кракозябрами)
Моё мнение такое - для профессионалов проблем с парсингом XML на Clarion уже нет - но у них либо свои проверенные решения, либо хорошие платные шаблоны
А вот новичкам с XML тяжеловато
У меня например, файл для парсинга с кодировкой DOS <?xml version = "1.0" encoding="CP866"?>
Как и писал Aragorn
В связи с вышеизложенным, прошу продвинутых профессионалов помочь новичкам в вопросе парсинга XML для Clarion и поделиться своими решениями, конечно если это не коммерческий продукт, как например EasyXMLну... вообще-то я стараюсь следовать правилам хорошего тона, которые гласят, что прежде чем задать вопрос, надо воспользоваться поиском... увы, ничего путного не нашел...
С Уважением, Developer
- Дед Пахом
- Старичок
- Сообщения: 3133
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
XML C8 - не понял...
Если кому очень надо, могу поделиться "триалом" EasyXML, пишите в личку.
С уважением, ДП
XML C8 - не понял...
Блин, написал большой текст, а Владыка Хаоса его сжевал...
1. Как заменить кодировку Windows-1251 на UTF-8 я уже написал
После замены удобно сразу строку из памяти и парсить, без загрузки в файл
Doc &= XmlStringToDom(CS.S)
If XMLDoc &= Null
Message('Ошибка разборки манифеста ' & Loc:ManifestFileName )
EXIT
End
2. Если тэг с параметрами, параметры надо разобрать отдельно, примерно так
А если без параметров, надо спуститься строкой ниже и достать значение
Get(QXML,Pointer(QXML)+1) ! Прочитали элемент
CS.Set(ListXML.Node.getNodeValue())
CS.ToAscii()
Loc:Value=CS.S
1. Как заменить кодировку Windows-1251 на UTF-8 я уже написал
После замены удобно сразу строку из памяти и парсить, без загрузки в файл
Doc &= XmlStringToDom(CS.S)
If XMLDoc &= Null
Message('Ошибка разборки манифеста ' & Loc:ManifestFileName )
EXIT
End
2. Если тэг с параметрами, параметры надо разобрать отдельно, примерно так
Код: Выделить всё
<?xml version="1.0" encoding="UTF-8" ?>
- <structure>
<program title="Модуль 2. Хранение, передача и публикация цифровой информации" />
<topic level="0" id="ГЛМЕНЮ" name="Главное меню" />
<topic level="0" id="A1" name="Раздел 1" />
<topic level="0" id="A2" name="Раздел 2. Публикация мультимедиаконтента" />
<topic level="0" id="A3" name="Раздел 3" />
<topic level="0" id="A4" name="Раздел 4. Защита информации" />
<topic level="0" id="A5" name="Раздел 5" />
</structure>
ParseTopic ROUTINE ! Анализируется строка <topic> и пишется в очередь ManQ
Nl &Nodelist,Auto
nnm &NamedNodeMap,auto
ANode &Node,Auto
AttrIndex Long
nnm &= QXML.Node.getAttributes()
IF not nnm &= null
Loop AttrIndex = 0 to nnm.getLength() - 1
Anode &= nnm.item(AttrIndex)
CS.Set(Anode.GetNodeValue())
CS.ToAscii()
Case lower(ANode.GetNodename())
Of 'level' !
ManQ:Level = CS.S
OF 'id'
ManQ:ID = Clip(CS.S)
OF 'name'
ManQ:Name = Clip(CS.S)
END
END
ADD(ManQ)
END
Get(QXML,Pointer(QXML)+1) ! Прочитали элемент
CS.Set(ListXML.Node.getNodeValue())
CS.ToAscii()
Loc:Value=CS.S
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
XML C8 - не понял...
Ничего не могу сказать про C8, но аналогичная проблема есть при использовании клариновских классов работы с XML в C63.
Тот же самый код собранный в C91 прекрасно загружает русский текст из XML в кодировке UTF-8. Это даже на примерах видно.
Видимо какая-то проблема с обработкой национальных таблиц символов в XML классах C63 ... (и возможно в C8)
Кстати, не все гладко и с русским текстом и в iQXML (при загрузке XML Win-1251), мы одно время переписывались с Robert'ом Paresi
на эту тему, и в общем-то большинство проблем он устранил, но не все. Мы даже из-за этого перестали обновлять библиотеку iqXML,
а потом и полностью от нее отказались ...
За теми кто отстал - не возвращаться. (С) Кодекс
XML C8 - не понял...
Не, в UTF-8 всё загружается без проблем. Одно маленькое НО - возвращаются строки в UTF-8, их надо раскодировать