Форум » Для флейма » XML » Ответить

XML

nick_mi: Это мне КАЖЕТСЯ или все таки в разделе Форум » [x]Harbour была еще с утра тема про XML, а только-что зашел - не увидел или у меня галики обосновались

Ответов - 14

Dima: nick_mi Была , я удалил так как разобрался...надеюсь с каличным XML Если есть интерес , выложу сам XML. До этого тоже разбирал но понятный по разбору.

SergKis: Dima пишет Если есть интерес , выложу сам XML. До этого тоже разбирал но понятный по разбору. Хотелось бы увидеть, т.к. с простой структурой понятно, а вот с "мусорной" ? Там кроме данных, описания разные и т.д., но нет описания самой структуры xml.

Dima: SergKis Привет.Вот оно. https://cloud.mail.ru/public/73uW/qyCCsA95g Пипец...

SergKis: Dima Спасибо, скачал, но гляну позже, дымлю по своей lib и прогам, на соответствие new hmg

Dima: SergKis Разрулить попробовал так [pre2] #include "hxml.ch" Proc main local oXml,oXmlDoc local zvhash:={=>} local sdhash:={} local npp:=0 REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") REQUEST HB_CODEPAGE_UTF16LE ,HB_CODEPAGE_UTF8 ,HB_CODEPAGE_UTF8EX REQUEST HB_CODEPAGE_RU866 hb_cdpSelect( "RU866" ) cc:=hb_MemoRead(hb_DirBase()+"orders.plist") oXml := HXMLDoc():ReadString( cc ) if oXml==nil return nil endif o:=oXml:find("plist") if o==nil return nil endif o1:=o:find("array") if o1==nil return nil endif for i=1 to len(o1:aitems) k:=o1:aitems[ i ] if k==nil return nil endif zvhash:={=>} sdhash:={=>} as:={} npp:=0 if k:title=="dict" for j=1 to len(k[3]) if k[3][j]:title=="key" if len(k[3][j+1]:aitems)#0 .and. k[3][j+1]:title=="string" zvhash[k[3][j]:aitems[1]]:=HB_UTF8TOSTR(k[3][j+1]:aitems[1],"RU866") endif elseif k[3][j]:title=="array" // содержимое if len(k[3][j]:aitems)#0 for kk=1 to len(k[3][j]:aitems) if k[3][j]:aitems[kk]:title=="dict" if hb_isarray(k[3][j]:aitems[kk][3]) .and. len(k[3][j]:aitems[kk][3])#0 as:={} for jj=1 to len(k[3][j]:aitems[kk][3]) if k[3][j]:aitems[kk][3][jj]:title=="key" if len(k[3][j]:aitems[kk][3][jj+1]:aitems)#0 .and. k[3][j]:aitems[kk][3][jj+1]:title=="string" aadd(as,{k[3][j]:aitems[kk][3][jj]:aitems[1],HB_UTF8TOSTR(k[3][j]:aitems[kk][3][jj+1]:aitems[1],"RU866")}) endif endif next npp++ sdhash[npp]:=aclone(as) endif endif next endif endif next ? hb_valtoexp(zvhash) ? hb_valtoexp(sdhash) *** получили 2 массива , заголовок заявки и ее содержимое , пишем в базу wait endif next return nil [/pre2]

nick_mi: Ну, слава Богу я не глючный.

Dima: SergKis пишет: Там кроме данных, описания разные и т.д., но нет описания самой структуры xml. Описание есть. Собственно это данные из проги Пан агент. SergKis пишет: но гляну позже Хорошо , подожду.

SergKis: Dima Ты читаешь xml определенной структуры по именам узлов, я думал что вариант типа ini -> Hash, т.е. секции и значения. так и у меня работает, более сложный xml (больше узлов) и некоторые не нужны. И я задаю узлы (с проверкой обязательные и нет, наличие обязательных тегов в узлах). Тут уже нет большой разницы в array\hash\dbf отправлять данные. Я привязался к структуре dbf (рабочие поля тоже вставляю, таких тегов нет) [pre2] FUNCTION Init_Stru( cFile ) LOCAL i,j,k,n IF empty(_aOrder) _aOrder := {} // tag name Field struct названия на док.\формах aAdd(_aOrder, {"XmlFileName" , { "FL_0" , "C" , 80 , 0 }, "Xml file name"}) aAdd(_aOrder, {"DocumentReceiveDateTime" , { "DH_1" , "C" , 20 , 0 }, "Document receiving date" }) aAdd(_aOrder, {"DocumentProcessDateTime" , { "DH_2" , "C" , 20 , 0 }, "Document processing date" }) aAdd(_aOrder, {"DocumentType" , { "DH_3" , "C" , 35 , 0 }, "Document type" }) aAdd(_aOrder, {"DocumentSource" , { "DH_4" , "C" , 1 , 0 }, "Document Source" }) aAdd(_aOrder, {"OrderNumber" , { "OH_1" , "C" , 35 , 0 }, "Order number" }) aAdd(_aOrder, {"OrderDate" , { "OH_2" , "C" , 10 , 0 }, "Order date" }) aAdd(_aOrder, {"OrderCurrency" , { "OH_3" , "C" , 3 , 0 }, "Order Currency" }) aAdd(_aOrder, {"ExpectedDeliveryDate" , { "OH_4" , "C" , 10 , 0 }, "Expected delivery date" }) aAdd(_aOrder, {"DocumentFunctionCode" , { "OH_5" , "C" , 1 , 0 }, "3/4/9/O/R. O-original, R-return" }) aAdd(_aOrder, {"SenderILN" , { "DP_1" , "C" , 13 , 0 }, "ILN of Document Sender" }) aAdd(_aOrder, {"ReceiverILN" , { "DP_2" , "C" , 13 , 0 }, "ILN of Document Receiver" }) aAdd(_aOrder, {"BuyerILN" , { "OP_1" , "C" , 13 , 0 }, "ILN of buyer" }) aAdd(_aOrder, {"BuyerName" , { "OP_2" , "C" , 80 , 0 }, "Buyer name" }) aAdd(_aOrder, {"OperatorName" , { "OP_3" , "C" , 40 , 0 }, "Name of Person who creates the order" }) aAdd(_aOrder, {"OperatorTelephoneNumber" , { "OP_4" , "C" , 35 , 0 }, "First telephone no.: dialling" }) aAdd(_aOrder, {"OperatorE-mail" , { "OP_5" , "C" , 80 , 0 }, "E-Mail Address of Operator" }) aAdd(_aOrder, {"SellerILN" , { "OP_6" , "C" , 13 , 0 }, "ILN of seller" }) aAdd(_aOrder, {"SellerName" , { "OP_7" , "C" , 80 , 0 }, "Seller Name" }) aAdd(_aOrder, {"SellerCodeByBuyer" , { "OP_8" , "C" , 35 , 0 }, "Code assigned to seller by buyer" }) aAdd(_aOrder, {"DeliveryPointILN" , { "OP_9" , "C" , 13 , 0 }, "ILN of delivery point" }) aAdd(_aOrder, {"DeliveryPointName" , { "OP_10", "C" , 80 , 0 }, "Delivery point name" }) aAdd(_aOrder, {"DeliveryPointCodeBySupplier" , { "OP_11", "C" , 35 , 0 }, "Code assigned to delivery location by buyer" }) aAdd(_aOrder, {"DeliveryPointStreetAndNumber", { "OP_12", "C" , 100 , 0 }, "Street and number" }) aAdd(_aOrder, {"DeliveryPointCityName" , { "OP_13", "C" , 50 , 0 }, "City name" }) aAdd(_aOrder, {"DeliveryPointPostalCode" , { "OP_14", "C" , 10 , 0 }, "Postal code" }) aAdd(_aOrder, {"DeliveryPointCountry" , { "OP_15", "C" , 10 , 0 }, "Country code (ISO 3166)" }) aAdd(_aOrder, {"ShipFromCodeByBuyer" , { "OP_16", "C" , 35 , 0 }, "Ship from" }) aAdd(_aOrder, {"DeliveryPointCodeByBuyer" , { "OP_17", "C" , 35 , 0 }, "Code assigned to delivery location by buyer" }) aAdd(_aOrder, {"TotalLines" , { "OS_1" , "N" , 10 , 0 }, "Total number of lines" }) aAdd(_aOrder, {"TotalOrderedAmount" , { "OS_2" , "N" , 19 , 3 }, "Total amount ordered" }) aAdd(_aOrder, {"TotalNetAmount" , { "OS_3" , "N" , 19 , 4 }, "Total purchase amount ordered" }) aAdd(_aOrder, {"TotalTaxAmount" , { "OS_4" , "N" , 19 , 4 }, "Total PVN amount ordered" }) aAdd(_aOrder, {"TotalTaxRate" , { "OS_5" , "N" , 7 , 2 }, "Total PVN procent ordered" }) aAdd(_aOrder, {"TotalNetTaxAmount" , { "OS_6" , "N" , 19 , 4 }, "Total PVN amount ordered fakt" }) aAdd(_aOrder, {"TotalFaktLine" , { "OS_7" , "N" , 7 , 0 }, "Total fakt line" }) aAdd(_aOrder, {"TotalSumma" , { "OS_8" , "N" , 15 , 4 }, "Total summa R_6" }) aAdd(_aOrder, {"DateCreateOrder" , { "DT_C" , "C" , 15 , 0 }, "DateTime create order" }) aAdd(_aOrder, {"DateModifyOrder" , { "DT_M" , "C" , 15 , 0 }, "DateTime modify order" }) aAdd(_aOrder, {"DateDeleteOrder" , { "DT_D" , "C" , 15 , 0 }, "DateTime delete order" }) aAdd(_aOrder, {"DateCreateInvoice" , { "DT_I" , "C" , 15 , 0 }, "DateTime create invoice" }) aAdd(_aOrder, {"PvnRegNumber" , { "NR_0" , "C" , 16 , 0 }, "Pvn.NR. or Reg.NR." }) aAdd(_aOrder, {"DokumentNr" , { "NR_1" , "C" , 16 , 0 }, "Dokument NR." }) aAdd(_aOrder, {"DokumentSerija" , { "NR_2" , "C" , 12 , 0 }, "Dokument Serija" }) aAdd(_aOrder, {"DokumentLVESOT" , { "NR_3" , "C" , 2 , 0 }, "Dokument LV / ES/ OTherwise" }) aAdd(_aOrder, {"KlientGruppa" , { "NR_4" , "C" , 12 , 0 }, "Gruppa klienta" }) aAdd(_aOrder, {"UmzValutaKod" , { "NR_5" , "C" , 6 , 0 }, "Kod svoeji valuti" }) aAdd(_aOrder, {"DokumentDate" , { "NR_6" , "D" , 8 , 0 }, "Data dokumenta" }) aAdd(_aOrder, {"DokumentOplataDay" , { "NR_7" , "N" , 7 , 0 }, "Day oplata dokumenta" }) aAdd(_aOrder, {"RegNumber" , { "NR_8" , "C" , 16 , 0 }, "Reg. NR. or Reg.NR." }) aAdd(_aOrder, {"InvoiceDateCreate" , { "NR_9" , "D" , 8 , 0 }, "Data create invoice xml" }) aAdd(_aOrder, {"U08_R_9" , { "NR_10", "C" , 3 , 0 }, "U08_R_9" }) aAdd(_aOrder, {"U08_ID_NUM" , { "NR_11", "C" , 10 , 0 }, "U08_ID_NUM" }) aAdd(_aOrder, {"U08_R_44" , { "NR_12", "C" , 6 , 0 }, "U08_R_44" }) aAdd(_aOrder, {"DokumentStatus" , { "NR_S" , "N" , 1 , 0 }, "Order line status" }) aAdd(_aOrder, {"BankKod" , { "BA_0" , "C" , 14 , 0 }, "BankKod" }) aAdd(_aOrder, {"BankName" , { "BA_1" , "C" , 40 , 0 }, "BankName" }) aAdd(_aOrder, {"BankKont1" , { "BA_2" , "C" , 21 , 0 }, "BankKont1" }) aAdd(_aOrder, {"BankKont2" , { "BA_3" , "C" , 21 , 0 }, "BankKont2" }) aAdd(_aOrder, {"OrderCurrency2" , { "VL_1" , "C" , 3 , 0 }, "Currency2 Order" }) aAdd(_aOrder, {"Data_Currency2" , { "VL_2" , "D" , 8 , 0 }, "Currency2 Data " }) aAdd(_aOrder, {"Kurs_Currency2" , { "VL_3" , "N" , 11 , 7 }, "Currency2 Kurs " }) aAdd(_aOrder, {"KolvoCurrency2" , { "VL_4" , "N" , 7 , 0 }, "Currency2 Kolvo" }) aAdd(_aOrder, {"TotalNetAmountCurrency2" , { "VL_5" , "N" , 19 , 4 }, "Currency2 Total purchase amount ordered" }) aAdd(_aOrder, {"TotalTaxAmountCurrency2" , { "VL_6" , "N" , 19 , 4 }, "Currency2 Total PVN amount ordered" }) aAdd(_aOrder, {"TotalNetCenaCurrency2" , { "VL_7" , "N" , 19 , 4 }, "Currency2 Total cena ordered" }) aAdd(_aOrder, {"OrderCurrency3" , { "VL_8" , "C" , 3 , 0 }, "Currency3 Bilance" }) _nOrderHead := len(_aOrder) aAdd(_aOrder, {"LineStatus" , { "LN_0" , "N" , 1 , 0 }, "Order line status" }) aAdd(_aOrder, {"LineNumber" , { "LN_1" , "N" , 10 , 0 }, "Order line number" }) aAdd(_aOrder, {"EAN" , { "LN_2" , "C" , 16 , 0 }, "EAN code of commodity" }) aAdd(_aOrder, {"BuyerItemCode" , { "LN_3" , "C" , 35 , 0 }, "Buyer's commodity code" }) aAdd(_aOrder, {"SupplerItemCode" , { "LN_4" , "C" , 35 , 0 }, "Seller's commodity code" }) aAdd(_aOrder, {"ItemDescription" , { "LN_5" , "C" , 100 , 0 }, "ItemDescription (Nosaukums)" }) aAdd(_aOrder, {"ItemType" , { "LN_6" , "C" , 2 , 0 }, "CU/RC Item type: CU-commodity, RC-returnable package" }) aAdd(_aOrder, {"OrderedQuantity" , { "LN_7" , "N" , 19 , 3 }, "Ordered quantity" }) aAdd(_aOrder, {"OrderedUnitPacksize" , { "LN_8" , "N" , 19 , 3 }, "Number of sales packeges in Ordered Unit (pc in box)" }) aAdd(_aOrder, {"UnitOfMeasure" , { "LN_9" , "C" , 10 , 0 }, "UnitOfMeasure" }) aAdd(_aOrder, {"OrderedUnitNetPrice" , { "LN_10", "N" , 19 , 4 }, "Net price, excluding VAT" }) aAdd(_aOrder, {"OrderedNetAmount" , { "LN_11", "N" , 19 , 4 }, "Net amount, Total for Row, without VAT" }) aAdd(_aOrder, {"Kods" , { "LN_12", "C" , 7 , 0 }, "Mat. kods" }) aAdd(_aOrder, {"Nosukums" , { "LN_13", "C" , 100 , 0 }, "Mat. nosukums" }) aAdd(_aOrder, {"Daudzums" , { "LN_14", "N" , 19 , 3 }, "Mat. daudzums" }) aAdd(_aOrder, {"Cena" , { "LN_15", "N" , 19 , 4 }, "Mat. cena" }) aAdd(_aOrder, {"Summa" , { "LN_16", "N" , 19 , 4 }, "Mat. summa" }) aAdd(_aOrder, {"AtlikumsDaudzums" , { "LN_17", "N" , 19 , 3 }, "Atl. daudzums" }) aAdd(_aOrder, {"AtlikumsCena" , { "LN_18", "N" , 19 , 4 }, "Atl. cena" }) aAdd(_aOrder, {"AtlikumsSumma" , { "LN_19", "N" , 19 , 4 }, "Atl. summa" }) aAdd(_aOrder, {"ZakazSumma" , { "LN_20", "N" , 19 , 4 }, "Summa zakaza" }) aAdd(_aOrder, {"PriznakEdit" , { "LN_21", "C" , 1 , 0 }, "Priznak korektirovki" }) aAdd(_aOrder, {"TaxRate" , { "LN_22", "N" , 7 , 2 }, "Procent PVN" }) aAdd(_aOrder, {"TaxAmount" , { "LN_23", "N" , 19 , 4 }, "Summa PVN line" }) aAdd(_aOrder, {"Merveniba" , { "LN_24", "C" , 5 , 0 }, "Ed.izmerenija" }) aAdd(_aOrder, {"LineStatusHand" , { "LN_25", "N" , 1 , 0 }, "Order line status set" }) aAdd(_aOrder, {"SpecialAtzimes" , { "SP_0" , "C" , 180 , 0 }, "SpecialAtzimes" }) ENDIF IF empty(_aOrderStru) k := len(_aOrder) _aOrderStru := Array(k) FOR i := 1 TO k; _aOrderStru := aClone(_aOrder[2]) NEXT ENDIF IF empty(_aOrderName) k := len(_aOrder) _aOrderName := Array(k) FOR i := 1 TO k; _aOrderName := {_aOrder[1], _aOrder[3]} NEXT ENDIF IF empty(_aOrderList) k := _nOrderHead _aOrderList := Array(k) FOR i := 1 TO k; _aOrderList := aClone(_aOrder[2]) NEXT ENDIF ArrOrderHead() IF ! empty(cFile); ArrOrderHead("XmlFileName", cFile) ENDIF ArrOrderLine() RETURN NIL [/pre2] сразу пишу в dbf с нужными типами полей. Потом проверяю на ошибки и или в потокол-базу ошибочных, либо в базу для обработки.

Dima: SergKis Сергей я же не про это. Когда данные таблицы в частности 1 запись живет в одной строке , то разобрать просто. Например это [pre2] <TABLE GUID="0738E61B-F06F-464A-8483-4249E0254819"> <ITEM GUID="00000002-0000-0000-0000-000057920823" DocID="00000001-0000-0000-0000-000057920813" A01="0000100F-0002-34AC-1989-823456778888" A02="" A03="00000001-ABCD-CCCC-7777-888888888888" A04="4" A05="6" A06="24" A015="null" /> <ITEM GUID="00000002-0000-0000-0000-000057920829" DocID="00000001-0000-0000-0000-000057920813" A01="00001446-0002-34AC-1989-823456778888" A02="" A03="00000002-ABCD-CCCC-7777-888888888888" A04="9" A05="55.2" A06="496.8" A015="null" /> <ITEM GUID="00000002-0000-0000-0000-00005792082E" DocID="00000001-0000-0000-0000-000057920813" A01="000013E9-0002-34AC-1989-823456778888" A02="" A03="00000002-ABCD-CCCC-7777-888888888888" A04="22" A05="100" A06="2200" A015="null" /> <ITEM GUID="00000002-0000-0000-0000-000057920834" DocID="00000001-0000-0000-0000-000057920813" A01="000016E0-0002-34AC-1989-823456778888" A02="" A03="00000001-ABCD-CCCC-7777-888888888888" A04="33" A05="8.9" A06="293.7" A015="null" /> <ITEM GUID="00000002-0000-0000-0000-000057920842" DocID="00000001-0000-0000-0000-000057920813" A01="00001E64-0002-34AC-1989-823456778888" A02="" A03="00000002-ABCD-CCCC-7777-888888888888" A04="5" A05="109.7" A06="548.5" A015="null" /> </TABLE> [/pre2] А когда данные 1-й строки живут в 4 строках , тут нужно велосипед изобретать. Например. [pre2] <dict> <key>coeff</key> <string>1.0</string> <key>discountPercent</key> <string>0.0</string> <key>discountSum</key> <string>0.0</string> <key>goodID</key> <string>9409</string> <key>modifiedDate</key> <string>03.07.2017 14:14:56</string> <key>originalPrice</key> <string>9.4</string> <key>price</key> <string>9.4</string> <key>properties</key> <array> </array> <key>quantity</key> <string>5.0</string> <key>sort</key> <string>0</string> <key>sum</key> <string>47.0</string> <key>unit</key> <string>Шт.</string> </dict> [/pre2] То есть мне надо к примеру поймать goodID из key и после читать следующий string и вытаскивать что в нем живет. А там еще и кака живет :) [pre2] <key>properties</key> <array> </array> [/pre2]

SergKis: Dima пишет А когда данные 1-й строки живут в 4 строках , тут нужно велосипед изобретать. Так и у меня все живет в разных узлах и в одной строке один тэг. У меня весь вопрос когда делать APPEND BLANK new строки и потом по мере нахождения тега из xml в массиве структуры (см.выше) запись в поле. В итоге получается в первой записи заполнено данные из заголовков док-та и первая строка заказа материала\товара, В след. строках док. данных из заголовка док. нет, есть заполненные данные по строкам заказа материала\товара. Потом разделить на запись в реестр и в таблицу документа строк - это не сложно.

SergKis: PS укороченный xml [pre2] <?xml version="1.0" encoding="utf-8"?> <Document-Order> <Document-Header> <DocumentReceiveDateTime>2014-10-20T08:41:39</DocumentReceiveDateTime> <DocumentProcessDateTime>2014-10-20T08:41:42</DocumentProcessDateTime> <DocumentID>406920616</DocumentID> <DocumentUID>308baa6f3dea490d997833092d787927</DocumentUID> <DocumentLink>https://ediweb.eu/edi/showDocument?uid=MzA4YmFhNmYzZGVhNDkwZDk5NzgzMzA5MmQ3ODc5Mjc%3D</DocumentLink> <DocumentType>ORDER</DocumentType> <DocumentSource>F</DocumentSource> <OriginalFileName><![CDATA[ORDERS_20562038.xml]]></OriginalFileName> </Document-Header> <Order-Header> <OrderNumber>4533708474</OrderNumber> <OrderDate>2014-10-20</OrderDate> <OrderCurrency>EUR</OrderCurrency> <ExpectedDeliveryDate>2014-10-24</ExpectedDeliveryDate> <DocumentFunctionCode>O</DocumentFunctionCode> </Order-Header> <Document-Parties> <Sender> <ILN>9981237153176</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>9981237153176</ILN> <Name>Rimi Lietuva UAB</Name> <OperatorDetails> <Name>Viktorija Krūminytė</Name> <E-mail>manager.T758@rimibaltic.com</E-mail> </OperatorDetails> </Buyer> <Seller> <ILN>4750140000007</ILN> <Name>Bisoks SIA</Name> <CodeByBuyer>1082</CodeByBuyer> </Seller> <DeliveryPoint> <ILN>4751008574388</ILN> <Name>Rimi MHM Luize (Klaipėda)</Name> <CodeBySupplier>Y92</CodeBySupplier> <CodeByBuyer>T758</CodeByBuyer> <StreetAndNumber>Šiaurės pr. 15, Klaipėda</StreetAndNumber> <CityName>Klaipėda</CityName> <PostalCode>92312</PostalCode> <Country>LT</Country> </DeliveryPoint> <ShipFrom> <CodeByBuyer>1082</CodeByBuyer> </ShipFrom> </Order-Parties> <Order-Lines> <Line> <Line-Item> <LineNumber>10</LineNumber> <EAN>4750140030110</EAN> <BuyerItemCode>7090121</BuyerItemCode> <SupplierItemCode>32051</SupplierItemCode> <ItemDescription>BĒRNU KLASISK. ZEĶES 32051 COLORED 14-16</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>3.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>0.7300</OrderedUnitNetPrice> <OrderedNetAmount>2.1900</OrderedNetAmount> </Line-Item> </Line> <Line> <Line-Item> <LineNumber>20</LineNumber> <EAN>4750140030127</EAN> <BuyerItemCode>7090122</BuyerItemCode> <SupplierItemCode>32051</SupplierItemCode> <ItemDescription>BĒRNU KLASISK. ZEĶES 32051 COLORED 17-19</ItemDescription> <ItemType>CU</ItemType> <OrderedQuantity>3.000</OrderedQuantity> <OrderedUnitPacksize>1.000</OrderedUnitPacksize> <UnitOfMeasure>GAB</UnitOfMeasure> <OrderedUnitNetPrice>0.7300</OrderedUnitNetPrice> <OrderedNetAmount>2.1900</OrderedNetAmount> </Line-Item> </Line> ... <Order-Summary> <TotalLines>52</TotalLines> <TotalOrderedAmount>174.0000</TotalOrderedAmount> <TotalNetAmount>198.1200</TotalNetAmount> </Order-Summary> </Document-Order> [/pre2]

Dima: SergKis Да у тебя нормальный XML и разбирать не сложно. Ты меня видать не понял. Глянь доку если хош Закинул к тебе , в свою папку Раздел "orders.plist"

SergKis: Dima пишет Ты меня видать не понял. [pre2]Я понял, в целом, правильно. Разница наших вариантов - у меня теги названы нормально и это имя поля в dbf - у тебя название тега спрятано в <key>...</key>, а значение в <string>...</string> Ты преобразуешь в hash. Все нормально. Но и твой вариант гонится в dbf (см. "фактические продажи") // 1 tag | 2 struct | 3 note { ; {'goodID' , {'GoodID' , 'C', 5, 0 }, 'GoodID' }, ; {'posID' , {'PosID' , 'C', 5, 0 }, 'PosID' }, ; {'date' , {'Date' , 'D', 8, 0 }, 'Date' }, ; {'quantity', {'Quantity', 'N', 15, 3 }, 'Quntity'}, ; {'sum' , {'Sum' , 'N', 15, 2 }, 'Summa' } ; } обходим узлы и названиям из <key>...</key> ищем по 1-му элементу, нашли -> FieldName и FieldType берем из 2-го элемента, <string>...</string> идет в FieldValue с преобр. типа и скидываем в поле. APPEND BLANK можно делать по <dict> и все прекрасно сядет в dbf recno 1: GoodID := '00009' recno 2: , PosID := '00025' recno 3: , Date := 01.01.2013, Quantity := 10.000, Sum := 300.00 recno 4: , Date := 02.01.2013, Quantity := 20.000, Sum := 600.00 ... Я не говорю, что это лучше или хуже, просто ты пошел одним путем, я другим. [/pre2]

Dima: SergKis пишет: у тебя название тега спрятано в <key>...</key>, а значение в <string>...</string> Это не у меня а у них Я бы если и делал свой XML , то со структурой как у тебя , понятной глазу и обработке. Остановлюсь пока на своем варианте , который выложил выше. Работает однако. Не люблю я эти XML на генетическом уровне



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