Форум » [x]Harbour » Снова XML » Ответить

Снова XML

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

Ответов - 61, стр: 1 2 3 4 All

SergKis: Давно использую для чтения предложенное от А.Кресина. Пример: [pre2] FUNCTION Xml_Open( xml ) LOCAL a,c,h,f,i,j,k,n,o,t,oXml,cFil,e := "ERROR",cVal,cDop,cKd cVal := gIniC7(cFileIni, "COM", "Currency1", "EUR") cVal := upper(cVal) cDop := gIniC7(cFileIni, "COM", "Currency2", "LVL") cDop := upper(cDop) cKd := cVal+','+cDop IF empty(xml) MsgBox(Lower(e), "Empty parameters", e) RETURN .F. ENDIF IF ! file(xml) MsgBox(Lower(e), "Not found:"+xml, e) RETURN .F. ENDIF j := space(3) h := fOpen(xml) IF h > 0 j := space(3) fRead(h, @j, 3) fClose(h) ENDIF IF j == chr(239)+chr(187)+chr(191) c := cWrk+iif(right(cWrk, 1) == "\", "", "\") f := c+lower(ProcName())+".xml" h := fCreate(f) IF h > 0 a := FileToArray(xml) k := len(a) FOR i := 1 TO k j := a[ i ] IF i == 1 IF left(j, 3) == chr(239)+chr(187)+chr(191); j := subs(j, 4) ENDIF ENDIF fWrite(h, j+hb_OsNewLine()) NEXT fClose(h) ENDIF oXml := HXMLDoc():Read(f) ELSE oXml := HXMLDoc():Read(xml) ENDIF IF Empty( oXml ) MsgBox(Lower(e), "Not found:"+xml, e) RETURN .F. ENDIF IF Empty( oXml:aItems ) MsgBox(Lower(e), "Not found:"+xml, e) RETURN .F. ENDIF cFil := xml IF ( i := RAt("\", xml) ) > 0; cFil := subs(xml, i+1) ENDIF Init_Stru(cFil) IF ! IsOrder(oXml); RETURN .F. ENDIF IF ! GetOrder_Currency(cKd); RETURN .F. ENDIF IF ! GetOrder_Header(); RETURN .F. ENDIF GetDocument_Parties() GetOrder_Parties() GetOrder_Summary() IF ! Crt_OrderDbf(); RETURN .F. ENDIF IF ! empty(f); fErase(f) ENDIF RETURN .T. FUNCTION IsOrder( oXml ) LOCAL c,i,j,k,o,t,v,e := "ERROR" t := "Document-Order" oXmlDoc := oXml:find(t) IF Empty( oXmlDoc ) MSgBox(Lower(e), "Not found tag:<"+t+">", e) RETURN .F. ENDIF t := "Document-Header" o := oXmlDoc:find(t) IF Empty( o ) MsgBox(Lower(e), "Not found tag:<"+t+">", e) RETURN .F. ENDIF t := "DocumentType" j := o:find(t) IF valtype(j) != "O" MsgBox(Lower(e), "Not found tag:<"+t+">", e) RETURN .F. ENDIF v := j:aItems[1] IF valtype(v) != "C" MsgBox(Lower(e), "Not found tag:<"+t+">", e) RETURN .F. ENDIF IF v != "ORDER" MsgBox(Lower(e), "File xml not found value ORDER:<"+t+">", e) RETURN .F. ENDIF k := len(o:aItems) FOR i := 1 TO k j := o:aItems ArrOrderHead(j:title, Get_Value(j, 1)) NEXT RETURN .T. [/pre2]

SergKis: PS чуть поехало в конце[pre2] k := len(o:aItems) FOR i := 1 TO k j := o:aItems[ i ] ArrOrderHead(j:title, Get_Value(j, 1)) NEXT [/pre2] Пример xml:[pre2] <?xml version="1.0" encoding="Utf-8"?> <Document-Order> <Document-Header> <DocumentReceiveDateTime>2010-09-23T11:01:32</DocumentReceiveDateTime> <DocumentProcessDateTime>2010-09-23T11:03:09</DocumentProcessDateTime> <DocumentType>ORDER</DocumentType> <DocumentSource>F</DocumentSource> <OriginalFileName>![CDATA[ORDERS_51653730.xml]]</OriginalFileName></Document-Header> <Order-Header> <OrderNumber>4518964305</OrderNumber> <OrderDate>2010-09-23</OrderDate> <OrderCurrency>LVL</OrderCurrency> <ExpectedDeliveryDate>2010-09-24</ExpectedDeliveryDate> <DocumentFunctionCode>O</DocumentFunctionCode> </Order-Header> <Document-Parties> <Sender> <ILN>4751008570007</ILN> </Sender> <Receiver> <ILN>4750140000007</ILN> <CodeBySender>1082</CodeBySender> </Receiver> <Creator> <SystemUniqueCode>system</SystemUniqueCode> <Name>System user</Name> <CreationType>E</CreationType> </Creator> </Document-Parties> <Order-Parties> <Buyer> <ILN>4751008570007</ILN> <Name>Rimi Latvia SIA</Name> <OperatorDetails> <Name>Inga Mankevica</Name> <TelephoneNumber>+3713713920152, +3713719483712</TelephoneNumber> <E-mail>sn.bauska@rimibaltic.com</E-mail> </OperatorDetails> </Buyer> <Seller> <ILN>4750140000007</ILN> <Name>Bisoks SIA</Name> <CodeByBuyer>1082</CodeByBuyer> </Seller> <DeliveryPoint> <ILN>4751008571394</ILN> <Name>SuperNetto Bauska</Name> <CodeBySupplier>S20</CodeBySupplier> <CodeByBuyer>S120</CodeByBuyer> <StreetAndNumber>Za─╝─Б iela 3</StreetAndNumber> <CityName>Bauska</CityName> <Country>LV</Country> </DeliveryPoint> <ShipFrom> <CodeByBuyer>1082</CodeByBuyer> </ShipFrom> </Order-Parties> <Order-Lines> <Line> <Line-Item> <LineNumber>10</LineNumber> <EAN>4750140220719</EAN> <BuyerItemCode>746934</BuyerItemCode> <ItemDescription>SIEVIE┼аU PUSGAR─АS ZE─╢ES 22071</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>16.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>0.8000</OrderedUnitNetPrice> <OrderedNetAmount>12.8000</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>20</LineNumber> <EAN>4750140411551</EAN> <BuyerItemCode>459632</BuyerItemCode> <SupplierItemCode>41155</SupplierItemCode> <ItemDescription>SIEV.ZE─╢B.41155 FAVORITE SPECIAL 20DEN</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>15.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>0.3600</OrderedUnitNetPrice> <OrderedNetAmount>5.4000</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>30</LineNumber> <EAN>4750140411209</EAN> <BuyerItemCode>459638</BuyerItemCode> <SupplierItemCode>41120</SupplierItemCode> <ItemDescription>SIEV.ZE─╢B.41120 FAVORITE SLIM 20DEN KAST</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>30.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>0.2800</OrderedUnitNetPrice> <OrderedNetAmount>8.4000</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>40</LineNumber> <EAN>4750140411407</EAN> <BuyerItemCode>459640</BuyerItemCode> <SupplierItemCode>41140</SupplierItemCode> <ItemDescription>SIEV.ZE─╢B.41140 FAVORITE COMF.30DEN KAST</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>24.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>0.3900</OrderedUnitNetPrice> <OrderedNetAmount>9.3600</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>50</LineNumber> <EAN>4750140421260</EAN> <BuyerItemCode>459210</BuyerItemCode> <ItemDescription>SIEV.ZE─╢B. 42126 RELAX FAVORITE 40DEN</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>16.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>0.9600</OrderedUnitNetPrice> <OrderedNetAmount>15.3600</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>60</LineNumber> <EAN>4750140721025</EAN> <BuyerItemCode>458908</BuyerItemCode> <ItemDescription>SIEVIE┼аU BIKS─кTES 72102 BISOKS</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>9.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>1.3200</OrderedUnitNetPrice> <OrderedNetAmount>11.8800</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>70</LineNumber> <EAN>4750140221389</EAN> <BuyerItemCode>746932</BuyerItemCode> <ItemDescription>SIEVIE┼аU VILNAS ─кSZE─╢ES 22138</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>20.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>0.5800</OrderedUnitNetPrice> <OrderedNetAmount>11.6000</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>80</LineNumber> <EAN>4750140220573</EAN> <BuyerItemCode>464983</BuyerItemCode> <ItemDescription>SIEVIE┼аU ZE─╢ES 22057 FAVORITE FITNESS</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>30.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>0.6100</OrderedUnitNetPrice> <OrderedNetAmount>18.3000</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>90</LineNumber> <EAN>4750140252512</EAN> <BuyerItemCode>462296</BuyerItemCode> <SupplierItemCode>25251</SupplierItemCode> <ItemDescription>SIEV.PUSG.ZE─╢ES 3 P─АRI 25251 FAV.20DEN</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>25.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>0.3700</OrderedUnitNetPrice> <OrderedNetAmount>9.2500</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>100</LineNumber> <EAN>4750140252116</EAN> <BuyerItemCode>462295</BuyerItemCode> <SupplierItemCode>25211</SupplierItemCode> <ItemDescription>SIEV. ─кS─АS ZE─╢ES 20 DEN 3 P─АRI 25211 FAV</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>45.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>0.3000</OrderedUnitNetPrice> <OrderedNetAmount>13.5000</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>110</LineNumber> <EAN>4750140421116</EAN> <BuyerItemCode>516964</BuyerItemCode> <SupplierItemCode>42111</SupplierItemCode> <ItemDescription>SIEV.ZE─╢B.42111 FAVORITE MAKE UP 20DEN</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>5.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>0.5800</OrderedUnitNetPrice> <OrderedNetAmount>2.9000</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>120</LineNumber> <EAN>4750140511084</EAN> <BuyerItemCode>792581</BuyerItemCode> <SupplierItemCode>51108</SupplierItemCode> <ItemDescription>MEIT.POLIAM.ZE─╢B.51108 FAVORITE</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>20.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>1.0300</OrderedUnitNetPrice> <OrderedNetAmount>20.6000</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>130</LineNumber> <EAN>4750140320587</EAN> <BuyerItemCode>446173</BuyerItemCode> <SupplierItemCode>32058</SupplierItemCode> <ItemDescription>B─ТRNU ZE─╢ES 32058 BISOKS</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>34.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>0.6100</OrderedUnitNetPrice> <OrderedNetAmount>20.7400</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>140</LineNumber> <EAN>4750140221372</EAN> <BuyerItemCode>747087</BuyerItemCode> <SupplierItemCode>22137</SupplierItemCode> <ItemDescription>SIEVIE┼аU VILNAS ZE─╢ES FAVORITE 22137</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>22.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>0.6100</OrderedUnitNetPrice> <OrderedNetAmount>13.4200</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>150</LineNumber> <EAN>4750140421390</EAN> <BuyerItemCode>771258</BuyerItemCode> <SupplierItemCode>42139</SupplierItemCode> <ItemDescription>S.Z/B.FAVORITE MICRO*SOFT 60 DEN 42139</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>25.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>1.2400</OrderedUnitNetPrice> <OrderedNetAmount>31.0000</OrderedNetAmount> </Line-Item> </Line> </Order-Lines> <Order-Summary> <TotalLines>15</TotalLines> <TotalOrderedAmount>336.000</TotalOrderedAmount> <TotalNetAmount>204.5100</TotalNetAmount> </Order-Summary> </Document-Order> [/pre2]

Dima: Ты про эту ? [pre2] /* * $Id: hxmldoc.prg 2265 2014-06-11 08:54:33Z alkresin $ * * Harbour XML Library * HXmlDoc class * * Copyright 2003 Alexander S.Kresin <alex@kresin.ru> * www - http://www.kresin.ru */ [/pre2] та что на сайте у него в сырцах HWGUI ? А что насчет UTF-16 ?


SergKis: Dima пишет та что на сайте у него в сырцах HWGUI ? А что насчет UTF-16 ? Брали оттуда для hb 2.0, так и работаем. Вроде в hb 3.2 похожий, а может и тот же - не смотрел. С Utf8 просто: 1. если файл xml с BOM, то откусываем BOM IF left(j, 3) == chr(239)+chr(187)+chr(191); j := subs(j, 4) ENDIF 3. Получаею значения [pre2] ... k := len(o:aItems) FOR i := 1 TO k j := o:aItems[ i ] ArrOrderHead(j:title, Get_Value(j, 1)) NEXT ... FUNCTION Get_Value( o, n, lUtf8 ) LOCAL j Default lUtf8 := m->lUtf8Set IF n == NIL; n := 1 ENDIF j := o:aItems[ n ] IF valtype(j) == "C" If lUtf8; j := hb_Utf8ToStr(j) EndIf ELSE ; j := "" ENDIF RETURN j [/pre2] Формирую xml как правило так: [pre2] <?xml version="1.0" encoding="Utf-8"?> <Document-Invoice> <Document-Header> <DocumentReceiveDateTime>^mDtoS(Date(), "-")+"T"+Time()</DocumentReceiveDateTime> <DocumentProcessDateTime>^-</DocumentProcessDateTime> <DocumentID>^-</DocumentID> <DocumentUID>^-</DocumentUID> <DocumentType>INVOICE</DocumentType> <DocumentSource>W</DocumentSource> <OriginalFileName>^-</OriginalFileName> </Document-Header> <Invoice-Header> <InvoiceNumber>^AllTrim(NR_2)+AllTrim(NR_1)</InvoiceNumber> <InvoiceDate>^mDtoS(Date(), "-")</InvoiceDate> <InvoiceCurrency>^OH_3</InvoiceCurrency> <InvoicePaymentDueDate>^mDtoS(Date()+10, "-")</InvoicePaymentDueDate> <InvoicePaymentTerms>10</InvoicePaymentTerms> <InvoicePostDate>^-</InvoicePostDate> <DocumentFunctionCode>O</DocumentFunctionCode> <DocumentNameCode>380</DocumentNameCode> <Remarks>^GetFile("txt_remarks.txt",.T.)</Remarks> <Order> <BuyerOrderNumber>^OH_1</BuyerOrderNumber> <BuyerOrderDate>^OH_2</BuyerOrderDate> <SellerOrderNumber>^-</SellerOrderNumber> </Order> <Delivery> <DeliveryLocationNumber>^OP_9</DeliveryLocationNumber> <CodeBySeller>^-</CodeBySeller> <CodeByBuyer>^-</CodeByBuyer> <Name>^-</Name> <StreetAndNumber>^-</StreetAndNumber> <CityName>^-</CityName> <Country>^-</Country> <DeliveryDate>^mDtoS(Date(), "-")</DeliveryDate> <DespatchNumber>^AllTrim(NR_2)+AllTrim(NR_1)</DespatchNumber> </Delivery> </Invoice-Header> <Document-Parties> <Sender> <ILN>^OP_6</ILN> </Sender> <Receiver> <ILN>^OP_1</ILN> </Receiver> <Creator> <SystemUniqueCode>^-</SystemUniqueCode> <Name>^-</Name> <E-mail>^-</E-mail> <CreationType>^-</CreationType> </Creator> </Document-Parties> <Invoice-Parties> <Buyer> <ILN>^OP_1</ILN> <TaxID>^-</TaxID> <CodeBySeller>^-</CodeBySeller> <UtilizationRegisterNumber>^-</UtilizationRegisterNumber> <Name>^-</Name> <StreetAndNumber>^gT("StreetR")</StreetAndNumber> <CityName>^-</CityName> <PostalCode>^-</PostalCode> <Country>^-</Country> </Buyer> <Payer> <ILN>^OP_1</ILN> <TaxID>^-</TaxID> <CodeBySeller>^-</CodeBySeller> <CodeByBuyer>^-</CodeByBuyer> <UtilizationRegisterNumber>^-</UtilizationRegisterNumber> <Name>^-</Name> <StreetAndNumber>^gT("StreetR")</StreetAndNumber> <CityName>^-</CityName> <PostalCode>^-</PostalCode> <Country>^-</Country> </Payer> <Invoicee> <ILN>^OP_1</ILN> <TaxID>^-</TaxID> <CodeBySeller>^-</CodeBySeller> <CodeByBuyer>^-</CodeByBuyer> <UtilizationRegisterNumber>^-</UtilizationRegisterNumber> <Name>^-</Name> <StreetAndNumber>^gT("StreetR")</StreetAndNumber> <CityName>^-</CityName> <PostalCode>^-</PostalCode> <Country>^-</Country> </Invoicee> <Seller> <ILN>^OP_6</ILN> <TaxID>^-</TaxID> <CodeBySeller>^-</CodeBySeller> <CodeByBuyer>^-</CodeByBuyer> <UtilizationRegisterNumber>^-</UtilizationRegisterNumber> <Name>^-</Name> <StreetAndNumber>^gT("StreetB")</StreetAndNumber> <CityName>^-</CityName> <PostalCode>^-</PostalCode> <Country>^-</Country> <OperatorDetails> <Name>^-</Name> <TelephoneNumber>^-</TelephoneNumber> <E-mail>^-</E-mail> </OperatorDetails> </Seller> <Payee> <ILN>^OP_6</ILN> <TaxID>^-</TaxID> <AccountNumber>^-</AccountNumber> <UtilizationRegisterNumber>^-</UtilizationRegisterNumber> <CodeBySeller>^-</CodeBySeller> <CodeByBuyer>^-</CodeByBuyer> <Name>^-</Name> <StreetAndNumber>^gT("StreetB")</StreetAndNumber> <CityName>^-</CityName> <Country>^-</Country> </Payee> </Invoice-Parties> <Invoice-Lines> <Line> <Line-Item> <LineNumber>^u2s(LN_1)</LineNumber> <EAN>^AllTrim(LN_2)</EAN> <SupplierItemCode>^-</SupplierItemCode> <ItemDescription>^LN_13</ItemDescription> <InvoiceQuantity>^iif(empty(LN_14), LN_7, LN_14)</InvoiceQuantity> <InvoiceUnitNetPrice>^iif(empty(LN_15), LN_10, LN_15)</InvoiceUnitNetPrice> <UnitOfMeasure>^LN_24</UnitOfMeasure> <InvoicedUnitPackSize>^-</InvoicedUnitPackSize> <TaxRate>^LN_22</TaxRate> <TaxCategoryCode>S</TaxCategoryCode> <TaxAmount>^LN_23</TaxAmount> <NetAmount>^iif(empty(LN_16), LN_11, LN_16)</NetAmount> </Line-Item> <Line-Delivery> <DeliveryLocationNumber>^OP_9</DeliveryLocationNumber> <CodeByBuyer>^-</CodeByBuyer> <Name>^-</Name> <DeliveryDate>^mDtoS(Date()+10, "-")</DeliveryDate> <DespatchNumber>^AllTrim(NR_2)+AllTrim(NR_1)</DespatchNumber> </Line-Delivery> <Line-AdditionalInformation> <CountryOfOrigin>^-</CountryOfOrigin> </Line-AdditionalInformation> </Line> </Invoice-Lines> <Invoice-Summary> <TotalLines>^OS_7</TotalLines> <TotalNetAmount>^OS_6</TotalNetAmount> <TotalTaxAmount>^OS_4</TotalTaxAmount> <TotalRounding>^-</TotalRounding> <TotalGrossAmount>^OS_6+OS_4</TotalGrossAmount> <Tax-Summary> <Tax-Summary-Line> <TaxRate>^OS_5</TaxRate> <TaxCategoryCode>S</TaxCategoryCode> <TaxAmount>^OS_4</TaxAmount> <TaxableAmount>^OS_6</TaxableAmount> </Tax-Summary-Line> </Tax-Summary> </Invoice-Summary> </Document-Invoice>[/pre2] где ^... - типа макроса для получения данных в тэг (<TotalGrossAmount>^OS_6+OS_4</TotalGrossAmount>) а ^- ( <TotalRounding>^-</TotalRounding> ) - тэг может отсутсвовать или быть пустым

SergKis: PS тексты языковые так <StreetAndNumber>^gT("StreetR")</StreetAndNumber> - рус. текст <StreetAndNumber>^gT("StreetL")</StreetAndNumber> - лат. текст внутри gt(...) If lUtf8; cTxt := hb_Str2Utf8(cT) cdp установлена должна быть правильной для работы hb_StrToUtf8, hb_Utf8Str

SergKis: PS 2 для ясности, читаю этот шаблон теми же средсвами, подставляю мкросы и вывожу в new.xml секции xml цикловые <Line> <Line-Item> ... </Line-Item> ... </Line> кручу в цикле DO WHILE ! EOF() ... заполняя данными макросов и подавая строки на выход

Dima: Сергей я в стопитсотый раз спрашиваю а как быть с UTF-16 а ты все молчишь Или я чего пропустил ?

SergKis: Dima Мне странно, что файл xml в unicode, даже не встречал в реале. В Dos у нас была утилитка перезаписи unicode -> Lv866 Возми в редактор ( можно notepad.exe, notepad2.exe) и перекодируй в Utf8, возможно где то есть готовые утилитки

Dima: Это должен быть автомат. Вот чего пишут в протоколе обмена [pre2] • Структура файла обмена данными Файл обмена данными представляет собой ZIP-архив, который может быть защищен паролем. Загружаемый в МУ архив с данными имеет название "From1C.zip" и внутри архива могут находиться следующие файлы: • XML-файл описания данных "FromCDB.xml". Формат XML-файла описывается в разделах ниже. При выгрузке данных из МУ формируется архив с названием "To1C.zip" и внутри архива могут находиться следующие файлы: • XML-файл описания данных "ToCDB.xml". Формат XML-файла описывается в разделах ниже. • Формат XML-файлов обмена данными Первая строка XML-файла называется объявлением XML – это строка, указывающая версию XML. Также здесь должна быть указана кодировка символов. Файл выгрузки из МУ имеет кодировку "UTF-16", файл загрузки в МУ из ЦБД может иметь кодировки "UTF-8", "UTF-16". Далее следует корневой тэг DATA. Атрибуты тэга описаны в таблице ниже. [/pre2] Файл выгрузки идет из проги под Андроид

SergKis: Dima в hb 3.2 есть src\codepage\cp_u16le.c static HB_CDP_GET_FUNC( UTF16LE_get ) ... так что думаю есть и установка cdp для нее, ставь, читай файл и делай hb_StrToUtf8

SergKis: Dima пишетФайл выгрузки идет из проги под Андроид Ну да с телефона xml я еще не принимал

Pasha: Как вариант: перекодировать файл в utf-8, работать с ним, а результат перекодировать в utf-16. С xml в utf-8 я успешно работаю как раз с помощью библиотеки А.Кресина. Непосредственно с utf-16 она конечно будет работать некорректно.

SergKis: Dima пишет Первая строка XML-файла называется объявлением XML – это строка, указывающая версию XML. Также здесь должна быть указана кодировка символов у меня <?xml version="1.0" encoding="Utf-8"?> а у тебя ?

Dima: SergKis [pre2] Пример: <?xml version="1.0" encoding="utf-16"?> <DATA> <CONSTANTS> ... </CONSTANTS> </DATA> [/pre2]

SergKis: Dima тогда по Пашиному рецепту перекодировать файл в utf-8, работать с ним, а результат перекодировать в utf-16. если принимаешь данные, то достаточно "перекодировать файл в utf-8" и отработать, например как у меня на библиоте А.Кресина если надо отдавать, то формируешь вых. xml в Utf8 (любым способом) и потом "результат перекодировать в utf-16"

Dima: Всем спасибо , нужно переварить это дело. Доки на родном языке я так понял нет к библиотеке А.Кресина.

Dima: Не пойму что ей надо :) [pre2] #include "hxml.ch" Proc main local oXml,oXmlDoc REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") REQUEST HB_CODEPAGE_UTF16LE REQUEST HB_CODEPAGE_UTF8 REQUEST HB_CODEPAGE_RU866 hb_cdpSelect( "RU866" ) oXml := HXMLDoc():Read( "test.xml" ) oXmlDoc := oXml:find("CONSTANTS") ? empty( oXmlDoc ) // .T. wait return nil [/pre2] Не находит CONSTANTS <?xml version="1.0" encoding="UTF-8"?> <DATA KILLALL="1"> <CONSTANTS> <ELEMENTS> <ITEM GUID="0270B3D5-4213-419B-9E3A-48CBA4CAEC04" Value="1"/> <ITEM GUID="619D132F-4A21-4DB6-99CB-240F254E218D" Value="1"/> <ITEM GUID="61A474B1-21D0-4047-B2D5-7213A7294050" Value=""/> <ITEM GUID="485EDECC-E0A9-4E1A-9091-7C71D8E6FF08" Value="66F150BD-9F28-4C85-A9C0-F2BA4D67CDF8"/> <ITEM GUID="D902C64A-9A7A-40D1-8067-E4BB6B309534" Value="1"/> <ITEM GUID="79C698DB-3C55-465E-ACFE-4741ACDD5655" Value="14ed8ba6-55bd-11d9-848a-00112f43529a"/> <ITEM GUID="A2E1CC68-0624-45A6-8057-EFD35259B9FE" Value="Белкина А."/> </ELEMENTS> <KILLEDS> </KILLEDS> </CONSTANTS> <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> <TABLE GUID="0738E61B-F06F-464A-8483-4249E0254819"> <ITEM GUID="F28210FA-97DB-4107-3E9A-2CB4259E199F" DocId="F28210DD-F7DB-4428-A5A6-BFDD69F71978" A01="DEE6E19A-55BC-11D9-848A-00112F43529A" A03="DEE6E19B-55BC-11D9-848A-00112F43529A" A04="1.000" A05="0.00" A09="3.00" A06="6057.83" A010="0" A07="6057.83" A08="0.000" A011="BD72D91F-55BC-11D9-848A-00112F43529A"/> </TABLE> </TABLES> </ITEM> </ELEMENTS> <KILLEDS> <ITEM GUID="E7D14BAA-47DB-4466-AAF3-D9A2317ACA5B"/> <ITEM GUID="E7D14A1B-67DB-4261-D1E1-BF539C773312"/> </KILLEDS> </DOCUMENT> </DOCUMENTS> <CATALOGS Comment="Справочники"> <CATALOG GUID="0E3CBAEA-5467-45CD-8C86-FB1777DA435B" Comment="Организации"> <ELEMENTS> <ITEM GUID="BD72D900-55BC-11D9-848A-00112F43529A" IsDeleted="0" Name="Торговый дом &quot;Комплексный&quot; " A02="0" A05="7705260699" A06="770501001" A07="" A04="(095) 1123456, доб. 789" A03="117452, Москва г, Симферопольский б-р, дом № 78, корпус 1" A09="112435, Москва, Одесская улица, дом № 67, корпус 1, кв.78" A010="ТД"/> <ITEM GUID="EF8F948C-8403-11DA-9AE9-000D884F5D77" IsDeleted="0" Name="Cтройснаб" A02="1" A05="7723240668" A06="772301001" A07="" A04="" A03="" A09="" A010="ССН"/> </ELEMENTS> </CATALOG> <CATALOG GUID="9450980F-FB59-47E3-BAE2-AA3C58441B1A" Comment="Контрагенты" KILLALL="1"> <GROUPS> <GROUP GUID="1E18C8DB-08F6-47DA-874B-100D6E109AB8" Comment="Группы"> <ELEMENTS> <ITEM GUID="CBCF494A-55BC-11D9-848A-00112F43529A" IsDeleted="0" Name="ПОКУПАТЕЛИ" ParId=""/> </ELEMENTS> </GROUP> </GROUPS> <ELEMENTS Comment="Элементы справочника 'Контрагенты'"> <ITEM GUID="DEE6E1B8-55BC-11D9-848A-00112F43529A" IsDeleted="0" Name="Инвема" A02="CBCF494A-55BC-11D9-848A-00112F43529A" A05="3" A06="D54381E3-D965-11DC-B30B-0018F30B88B5" A08="DEE6E1B9-55BC-11D9-848A-00112F43529A" A09="CBCF495D-55BC-11D9-848A-00112F43529A" GrpId0="CBCF494A-55BC-11D9-848A-00112F43529A"/> <ITEM GUID="DEE6E1C1-55BC-11D9-848A-00112F43529A" IsDeleted="0" Name="Саймон и Шустер" A02="CBCF494A-55BC-11D9-848A-00112F43529A" A05="3" A06="5BB4A903-C29F-11DC-96A3-0018F30B88B5" A08="DEE6E1C2-55BC-11D9-848A-00112F43529A" GrpId0="CBCF494A-55BC-11D9-848A-00112F43529A"/> </ELEMENTS> </CATALOG> <CATALOG GUID="D6D52ADA-0F38-4112-AF3C-2F1E425A43D1" Comment="Номенклатура" KILLALL="1"> <GROUPS> <GROUP GUID="8E502A85-8DD4-41CF-A7A4-17AB50872D36" Comment="Группы"> <ELEMENTS> <ITEM GUID="BD72D924-55BC-11D9-848A-00112F43529A" IsDeleted="0" Name="Бытовая техника" ParId=""/> <ITEM GUID="BD72D925-55BC-11D9-848A-00112F43529A" IsDeleted="0" Name="Кухонные электроприборы" ParId="BD72D924-55BC-11D9-848A-00112F43529A"/> </ELEMENTS> </GROUP> <GROUP GUID="E42DA5B9-E29B-43E1-B7E3-9B500879D6B7" Comment="Категории"> <ELEMENTS> <ITEM GUID="A8EBEACD-5818-11D9-A2C3-00055D80A2D1" IsDeleted="0" ParId="" Name="Кофеварки"/> <ITEM GUID="F3F718B5-0504-11DC-A415-00055D80A2D1" IsDeleted="0" ParId="" Name="Мясорубки"/> </ELEMENTS> </GROUP> </GROUPS> <ELEMENTS Comment="Элементы справочника 'Номенклатура'"> <ITEM GUID="BD72D927-55BC-11D9-848A-00112F43529A" IsDeleted="0" Name="Комбайн кухонный BINATONE FP 67" Code="00000000057" A04="18" A06="BD72D928-55BC-11D9-848A-00112F43529A" A08="0" A011="109" A013="BD72D928-55BC-11D9-848A-00112F43529A" A014="0" A015="0" A035="Комбайн кухонный BINATONE FP 67" A037="1" A038="0" A020="15956.19" A021="19932" A022="3730" A030="2" A031="107" A032="0" A033="0" A034="0" GrpId0="BD72D925-55BC-11D9-848A-00112F43529A" GrpId1="A8EBEACD-5818-11D9-A2C3-00055D80A2D1"/> <ITEM GUID="BD72D92C-55BC-11D9-848A-00112F43529A" IsDeleted="0" Name="Кофеварка BRAUN KF22R" Code="00000000102" A04="18" A06="BD72D92D-55BC-11D9-848A-00112F43529A" A08="0" A011="91" A013="BD72D92D-55BC-11D9-848A-00112F43529A" A014="0" A015="0" A035="Кофеварка BRAUN KF22R" A037="1" A038="0" A020="15956.19" A021="19932" A022="13925" A030="0" A031="91" A032="0" A033="0" A034="0" GrpId0="BD72D925-55BC-11D9-848A-00112F43529A" GrpId1="A8EBEACD-5818-11D9-A2C3-00055D80A2D1"/> <ITEM GUID="CBCF4999-55BC-11D9-848A-00112F43529A" IsDeleted="0" Name="Мясорубка ЭКМ-3" Code="00000000105" A04="18" A06="DEE6E169-55BC-11D9-848A-00112F43529A" A08="0" A011="1" A013="DEE6E169-55BC-11D9-848A-00112F43529A" A014="0" A015="0" A035="Мясорубка ЭКМ-3" A037="1" A038="0" A020="19090.44" A021="23847" A022="16661" A030="1" A031="0" A032="0" A033="0" A034="0" GrpId0="BD72D925-55BC-11D9-848A-00112F43529A" GrpId1="F3F718B5-0504-11DC-A415-00055D80A2D1"/> </ELEMENTS> </CATALOG> <CATALOG GUID="80452C60-B442-4DA9-A048-42F63270CA14" Comment="ЕдиницыИзмерения" KILLALL="1"> <ELEMENTS> <ITEM GUID="BD72D928-55BC-11D9-848A-00112F43529A" IsDeleted="0" Name="шт" A03="BD72D927-55BC-11D9-848A-00112F43529A" A02="1" A04="0"/> <ITEM GUID="BD72D92D-55BC-11D9-848A-00112F43529A" IsDeleted="0" Name="шт" A03="BD72D92C-55BC-11D9-848A-00112F43529A" A02="1" A04="0"/> <ITEM GUID="DEE6E169-55BC-11D9-848A-00112F43529A" IsDeleted="0" Name="10 упак" A03="CBCF4999-55BC-11D9-848A-00112F43529A" A02="1" A04="0"/> </ELEMENTS> </CATALOG> <CATALOG GUID="2516FFCE-F46F-4326-BE00-438EF0871D30" Comment="Склады" KILLALL="1"> <ELEMENTS> <ITEM GUID="BD72D91F-55BC-11D9-848A-00112F43529A" IsDeleted="0" Name="Главный склад" Code="0"/> <ITEM GUID="CBCF4956-55BC-11D9-848A-00112F43529A" IsDeleted="0" Name="Склад электротоваров" Code="1"/> <ITEM GUID="1DE4815D-FD36-11DB-A40E-00055D80A2D1" IsDeleted="0" Name="Автомобиль №1" Code="2"/> </ELEMENTS> </CATALOG> </CATALOGS> <NUMERATORS> <ELEMENTS> <ITEM GUID="EC0B3301-37DB-4900-B721-18CF64095C02" NumeratorId="3AFF1BBD-AF9A-415D-B6DD-1339C45C2F89" TypeId="6F823595-E28D-4DD7-8038-9B9BB2E04CEA" Prefix="ТД" Number="000000106"/> </ELEMENTS> </NUMERATORS> <PICTURES KILLALL="1"> <ELEMENTS> <ITEM GUID="133FEC77-97DB-434E-8DBA-77A6С3326C86" FileName="133FEC77-97DB-434E-8DBA-77A6С3326C86.png" Description="..." /> </ELEMENTS> </PICTURES> </DATA>

PSP: Dima, насколько я понимаю, в этом xml нет корневого элемента, обрамляющего все остальные элементы.

Dima: PSP Тэг DATA корневой

PSP: Хотя да, не разглядел)



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