Форум » [x]Harbour » Как использовать hbxml.lib? » Ответить

Как использовать hbxml.lib?

Tadeusz: Здравствуйte, Я хотел бы создать код, используя hbxml.lib, который будет генерировать XML файле структурирована следующим образом. Я не могу справиться с ней. Не могли бы Вы мне помочь в написании этого кода. [pre2] <?xml version="1.0" encoding="iso-8859-2"? > <Nadawca Struktura="1.7" Nazwa="Firma ABC" NazwaSkrocona="ABC" Miejscowosc="City" Ulica="Klonowa" Dom="10A" Kod="46200" > <Zbior> <Przesyłka> <Atrybut Typ="" Nazwa="Symbol">180 </Atrybut> <Atrybut Typ="" Nazwa="Wersja">1&# 60;/Atrybut> <Atrybut Typ="" Nazwa="Wartosc">20 00</Atrybut> <Atrybut Typ="" Nazwa="Uslugi">O&# 60;/Atrybut> <Atrybut Typ="Adresat" Nazwa="Nazwa">Luka szewski Maciej</Atrybut> <Atrybut Typ="Adresat" Nazwa="Rodzaj">N&# 60;/Atrybut> <Atrybut Typ="Adresat" Nazwa="Ulica">Modr zewiowa</Atrybut> <Atrybut Typ="Adresat" Nazwa="Dom">6A< ;/Atrybut> <Atrybut Typ="Adresat" Nazwa="Dom">10< ;/Atrybut> <Atrybut Typ="Adresat" Nazwa="Miejscowosc" 2;Lipkowo</Atrybut> <Atrybut Typ="Adresat" Nazwa="Kod">99999& #60;/Atrybut> </Przesyłka> <Przesyłka> <Atrybut Typ="" Nazwa="Symbol">180 </Atrybut> <Atrybut Typ="" Nazwa="Wersja">1&# 60;/Atrybut> <Atrybut Typ="" Nazwa="Wartosc">50 00</Atrybut> <Atrybut Typ="" Nazwa="Uslugi">O&# 60;/Atrybut> <Atrybut Typ="Adresat" Nazwa="Nazwa">Kowa lski JAn</Atrybut> <Atrybut Typ="Adresat" Nazwa="Rodzaj">N&# 60;/Atrybut> <Atrybut Typ="Adresat" Nazwa="Ulica">Sosn owa</Atrybut> <Atrybut Typ="Adresat" Nazwa="Dom">55< ;/Atrybut> <Atrybut Typ="Adresat" Nazwa="Dom">1< /Atrybut> <Atrybut Typ="Adresat" Nazwa="Miejscowosc" 2;Debno</Atrybut> <Atrybut Typ="Adresat" Nazwa="Kod">12345& #60;/Atrybut> </Przesyłka> ...... ...... <Przesyłka> <Atrybut Typ="" Nazwa="Symbol">180 </Atrybut> <Atrybut Typ="" Nazwa="Wersja">1&# 60;/Atrybut> <Atrybut Typ="" Nazwa="Wartosc">50 00</Atrybut> <Atrybut Typ="" Nazwa="Uslugi">O&# 60;/Atrybut> <Atrybut Typ="Adresat" Nazwa="Nazwa">Nowa k Jan</Atrybut> <Atrybut Typ="Adresat" Nazwa="Rodzaj">N&# 60;/Atrybut> <Atrybut Typ="Adresat" Nazwa="Ulica">Dlug a</Atrybut> <Atrybut Typ="Adresat" Nazwa="Dom">55< ;/Atrybut> <Atrybut Typ="Adresat" Nazwa="Dom">1< /Atrybut> <Atrybut Typ="Adresat" Nazwa="Miejscowosc" 2;Debno</Atrybut> <Atrybut Typ="Adresat" Nazwa="Kod">12345& #60;/Atrybut> </Przesyłka> </Zbior> </Nadawca> [/pre2]

Ответов - 13

Dima: пипец а что я это вытащил из премодерации....... ;)

alkresin: Если речь идет об hbxml.lib из HwGUI, то это может выглядеть примерно так ( формируемый xml немного сокращен ): Function main Local oDoc, oInit, oZbior, oPrzes, oAttr oDoc := HXMLDoc():New( "iso-8859-2" ) oInit := HXMLNode():New( "Nadawca",,{ { "Struktura","1.7" }, { "Nazwa","Firma ABC" } } ) oDoc:Add( oInit ) oZbior := HXMLNode():New( "Zbior" ) oInit:Add( oZbior ) oPrzes := HXMLNode():New( "Przesylka" ) oZbior:Add( oPrzes ) oAttr := HXMLNode():New( "Atrybut",,{ {"Nazwa","Symbol"} } ) oAttr:Add( "180" ) oPrzes:Add( oAttr ) oAttr := HXMLNode():New( "Atrybut",,{ {"Nazwa","Wersja"} } ) oAttr:Add( "160" ) oPrzes:Add( oAttr ) oPrzes := HXMLNode():New( "Przesylka" ) oZbior:Add( oPrzes ) oAttr := HXMLNode():New( "Atrybut",,{ {"Nazwa","Symbol"} } ) oAttr:Add( "180" ) oPrzes:Add( oAttr ) oDoc:Save( "amy.xml" ) return nil

Pasha: Dima пишет: пипец а что я это вытащил из премодерации....... ;) Товарищ по ошибке кликнул вместо кнопки "Новая тема" на "Новый опрос"


Dima: Поправил 1 месагу.

Tadeusz: Спасибо, что я имел в виду приветствую Tadeusz

Pasha: alkresin пишет: Если речь идет об hbxml.lib из HwGUI Александр, проясните пожалуйста такой момент: Сейчас в Вашей библиотеке выполняется замена символов, в частности: ' --> &apos; " --> &qout; Сдаем квартальную отчетность в ПФР. По правилам этого учреждения наименование организации должно быть на верхнем регистре, и не иметь символа ". Двойные кавычки рекомендуется заменять на одинарные. Заменяю. Делаю результирующий xml. hbxml делает замену ' --> &apos; Программы проверки ПФР ругаются, обнаруживая символы на нижнем регистре, и не принимают отчет. А теперь внимание вопрос (c) Насколько обязательным в xml является замена одинарных кавычек на &apos; ? Или это недоработка ПФР ? Потому как ПФУ (такая же организация, только на Украине), распознает &apos; в xml.

alkresin: Насколько я понимаю, эта замена обязательна в тех случаях, когда ее неприменение приводит к неоднозначности, в остальных случаях она допустима, но не необходима. В частности, в атрибутах тэга она обязательна - см., например, здесь. В некоторых приложениях XML она обязательна везде, например, в для sitemap или в стандарте Яндекса. В любом случае, такая замена не является нарушением, но ПФР закон не писан :)

Pasha: А можно ли в библиотеку добавить возможность задавать список символов, которые требуют замены ? По умолчанию пусть их будет 6, но этот список можно было бы изменить. Я смотрю, софт, который готовит отчетность в формате xml в различные организации (сейчас это распространено), не выполняет подобных замен, а выгружает спецсимволы как они есть. И программы приема и проверки отчетности бывает их не воспринимают (пример - этот ПФР).

alkresin: А можно ли в библиотеку добавить возможность задавать список символов, которые требуют замены ? Хорошая мысль. Так и сделаю. С ПФР у меня этой проблемы не возникало, потому что я изначально делал отчеты для него без hbxml. Просто FCreate(), FWrite() ... Библиотеку я использую когда надо не только выводить что-то в xml, но и читать и анализировать его.

Pasha: А я как раз использую hbxml. Среди нескольких подобных продуктов для харбора эта библиотека мне понравилась больше всех.

alkresin: А можно ли в библиотеку добавить возможность задавать список символов, которые требуют замены ? Подумал еще немного на эту тему. Наверное, оптимальным вариантом будет добавить метод, который запретит какие-то замены из существующего предопределенного набора при записи xml. Например, SetDisable( "apos" ).

Pasha: Может быть использовать для этих целей команду CLASSDATA ? Или CLASS VAR ? Вроде бы они специально для этого и предназначены. CLASS HXMLNode .. CLASSDATA cPredefined INIT "..."

alkresin: Сделал, загрузил на SVN. Выглядит это примерно так. Установить новые пары значений: hbxml_SetEntity( { { "lt;","<" },{ "amp;","&" }, { "nbsp;"," " }, { "quot;",'"' } } ) Восстановить те, что по умолчанию: hbxml_SetEntity() Учтите, что эта установка действует для всех xml объектов и при чтении, и при записи.



полная версия страницы