Diskuze: XML univerziální načítání

C# .NET .NET (C# a Visual Basic) XML univerziální načítání American English version English version

Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:

Zdravím, řeším menší, pro mě, zapeklitou hádanku. Mám za úkol vytvořit program, který bude sloužit jako "most" pro databáze několika firem do databáze jedné firmy. Firmy posílájí XML feedy, kde jsou informace o produktech.
Jedna firma pošle XML například ve tvaru

<SHOP>
<SHOPITEM>
       <PRODUCT>Název produktu</PRODUCT>
       <DESCRIPTION>Popis produktu</DESCRIPTION>
       <PRICE>698</PRICE>
       <PRICE_VAT>845</PRICE_VAT>
       <VAT>21</VAT>
       <AVAILABILITY>0</AVAILABILITY>
</SHOPITEM>
// dalších 100 záznamů
// ....
</SHOP>

Jiná firma pošle

<STORE>
<PRODUCT>
       <NAME>Název produktu</NAME>
       <DESC>Popis produktu</DESC>
       <PRICE>698</PRICE>
       <VAT>21</VAT>
       <AVAILABILITY>0</AVAILABILITY>
</PRODUCT>
// dalších 100 záznamů
// ....
</STORE>

Tak a co já řeším. Zkouším vymyslet proogram, který dokáže přečíst libovolný XML, nabídnout všechny vyskytující se elementy. Zaškrtat elementy a "vyflusnout" nové XML. Problém je samozřejmě s načítáním. Nemůžu vědet strukturu a tak se snažím vymyslet nějaký chytrý rozpoznávač na kořenový element. To bude stačit. Stačí zjistit že kořenový element je SHOPITEM, jindy PRODUCT a další už si načítám.

Napadlo mě zkusit projet uzly po uzlu a jakmile bude mít jeden uzel vnořených víc jak dva uzly jedná se o kořenový uzel, který hledám. Ovšem tohle nebude asi nejelpší řešení.

Nějaké nápady ? :) Druhá varianta je pro každou firmu udělat tlačítko "Načti" a budu vědět strukturu. Ale těch firem bude možná 5, možná 40 :D. A ručně se mi to cvakat nechce :`

Doufám že mi nikdo neřekne že DOM nebo SAX či něco podobného to má v sobě věstavené :D

Odpovědět 9.4.2013 20:11
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:

Tak možná jsem to vyřešil rychleji než jsme předpokládal :D ... myslíte že tohle bude vždy funkční postup ?

XmlDocument doc = new XmlDocument();
doc.Load("datXML.xml");
XmlNode root = doc.DocumentElement; // hlavní kořen
XmlNode f = root.FirstChild; // získám první item
if (f.Name == "SHOPITEM")
{
    Console.WriteLine("AAA");
}

Zde sice vím jaký je hledaný kořen a testuju to, ale takhle by to mohlo fungovat.. co myslíte ? :)

Nahoru Odpovědět 9.4.2013 20:20
Pokrok nezastavíš, neusni a jdi s ním vpřed
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.