V předchozích dílech o XML jsme se opírali zásadním způsobem o definici XSD – schématu. Jedná se o metodu, v níž za nás export do XML zařídí Excel. Z hlediska správnosti výstupu a vhodné kontroly obsahu je tato metoda neocenitelná. Ovšem existují důležité situace, kdy s tím nevystačíme. Dnes se zaměříme na přímé sestrojení XML souboru z nitra VBA. Využijeme k tomu DOM = Document Object Model.
Podkladová úloha: Ponecháváme si příklad s Klubem Franze Kafky z minulých dílů. Stáhněte si sešit 2013-10 XML.xlsm z odkazu na konci článku. Sešit otevřete. Uvidíte zhruba toto:
Předseda se zmínil, že mu z UNESCO napsali, aby seznam náboženství nebyl v jedné položce, ale pěkně jako opakovaná položka. Při představě, jak budete vytvářet další a další mapování, vás jímá závrať, a tak se rozhodnete použít XMLDOM od Microsoftu.
Nejprve si řekněme o DOM něco obecně. Objektový model je obvykle vnímán jako rozhraní mezi programovacími jazyky a nějakým souborem vlastností. Pomocí vlastností a metod tento soubor ovládáme z některého programovacího jazyka – a obecně z mnoha různých. Například z VBA takto ovládáme Excel – pracujeme s objektovým modelem Excelového sešitu. Písmeno „D“ zdůrazňuje, že se bude jednat o dokument. Tedy soubor dat. Nejčastěji jde o data typu HTML nebo XML, ale může se jednat třeba o dokument aplikace Word, nebo CorelDraw.
V tomto seriálu se zatím budeme věnovat pouze datovým objektům XML. Nicméně logika práce s DOM se nám bude hodit i pro další použití.
Musíme si nejprve vytvořit představu, co vlastně chceme získat. XML datový soubor je vždycky strom. Pro upřesnění, lépe by bylo se o stromu bavit z hlediska jeho pařezu a kořenů, protože se kreslí shora dolů. Představme si, že kořeny jsou nekonečně pevné, takže se nikdy nepřetrhnou. Pařez je jediný, z něj se větví hlavní kořeny, z nich další, až po kořenové vlášení. Pokud by nějaký obr pařez vytrhl ze země, všechny součásti kořenového systému by šly ze země s ním. Žádný kousek by nezůstal v zemi. Stromem nad zemí se nemusíme zabývat.
Přejdeme do VBE, zvolíme v Menu Tools->References, a protože máme náš VBA projekt chráněn heslem, sdělíme naše heslo „1234“. Poté se objeví následující dialog:
Všimněte si, že máme k dispozci i starší DLL modely XML – verze 3, 4, 5. Použití těchto starších modulů by mohlo mít smysl v případech, kdybychom potřebovali dodržet kompatibilitu…