Autor Téma: xmldokument problem  (Přečteno 471 krát)

Offline Ján Masaryk

  • Mladík
  • **
  • Příspěvků: 53
  • Karma: 5
    • Verze Delphi: 2010
Re:xmldokument problem
« Odpověď #15 kdy: 23-11-2017, 17:33:06 »
Keď počujem XML, tak sa mi zježia všetky chlpy na tele :)

Skús superobject viď príloha, alebo si to stiahni z https://github.com/hgourvest/superobject

Primárne je to na prácu s JSON, ale dokáže to parsovať XML.
Skúsil som to a keď som videl výsledok, skoro som sa rozplakal od zlosti, ako komplikovane som robil parsery.

Malá ukážka kódu

Kód: Delphi [Vybrat]
  1.  
  2. // NACITANIE SUBORU
  3. cXML := XMLParseFile('161112202.xml', true);
  4.  
  5. // PRECITANIE POPISU 18. POLOZKY SUBORU
  6. cPopis := cXML.S['zbozi[18].popis'];
  7.  
  8.  

Doporučujem minimálne vyskúšať.




Offline František

  • Hrdina
  • ****
  • Příspěvků: 295
  • Karma: 3
    • Verze Delphi: primárne v XE5, občaas 10.1 starter, XE, BDS2006
Re:xmldokument problem
« Odpověď #16 kdy: 27-11-2017, 02:49:07 »
no kuknem, ale ako je to z rýchlosťou? (oproti DOM, SAX či xtr transformacie?)

Offline František

  • Hrdina
  • ****
  • Příspěvků: 295
  • Karma: 3
    • Verze Delphi: primárne v XE5, občaas 10.1 starter, XE, BDS2006
Re:xmldokument problem
« Odpověď #17 kdy: 27-11-2017, 08:43:40 »
alebo to najrýchlejšie prebehnem s pos()?

Offline Ján Masaryk

  • Mladík
  • **
  • Příspěvků: 53
  • Karma: 5
    • Verze Delphi: 2010
Re:xmldokument problem
« Odpověď #18 kdy: 27-11-2017, 10:02:11 »
V demos si skompiluj VirtualTreeView v Options si zaškrtni PACK XML a skús otvoriť nejaké xml.

Skúšal som to na 37MB XML - soedit ho zobrazil za cca 7 sekúnd. V čase bolo aj načítanie do TreeView
Neskúšal merať čas na XMLParseFile(), to si môžeš vyskúšať sám.

Páči sa mi na tom to, že pristupuješ priamo ku konkrétnej položke XML
Vlastne to simuluje, že XML nie je XML ale JSON  ;)

napr.

Kód: Delphi [Vybrat]
  1. cPopis := cXML.S['zbozi[18].popis'];
  2.  
  3. // priamo
  4. dTerminOd := StrToDate(cXML.S['Zajezd[0].Terminy.Termin[0].DatumOd']);
  5.  
  6. // alebo v Cykle
  7. dTerminOd := StrToDate(cXML.S['Zajezd[' + IntToStr(nI) + '].Terminy.Termin['+ IntToStr(nJ) +'].DatumOd']);
  8.  

Nemám to podrobne preskúmané, lebo to momentálne používam na jednoduchšie XML-ká.

Na rozdiel od JSON-u sú všetky hodnoty String a teda musíš robiť konverziu..

Ešte jedna dôležitá poznámka - XML musí byť utf-8.
« Poslední změna: 27-11-2017, 10:04:55 od Ján Masaryk »

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: