Jak cist XML v LINQu aneb co delat kdyz XML tridy .NET vraceji null

Po zkraceni zivota o nekolik let jsem se rozhodl vyzkouset LINQ misto klasickych XML trid. Nejdrive ve VC# 2010 ale brzo jsem zjistil ze kdyz si pridam do projektu C# 2.0 assembly System.Xml.Linq.dll ve verzi 3.5.0.0, mohu s tim pracovat s nejakymi omezenimi v ramci syntaxe i zde. Trochu jsem s tim laboroval a prisel jsem na toto:

Pokud mate xml kde nemate specifikovany vsechny namespace, musite tento xml pred spustenim upravit nebo tam ty namespace pridat. Treba wordpress generuje export file bez atom namespace, takto jej tam pridate natrvalo do toho souboru:

Nemusite se bat ze by se vam tyto namespace zduplikovali, trida XmlDocument si to hlida.
A ted k samotnemu LINQu. Metodou XDocument.Element se mi podarilo ziskat element bez prefixu ale kdyz jsem mu zadal prefix jakykoliv(treba {wp}) tak mi taky vzdy vracel null. Toto se mi ale nestalo kdyz jsem prochazel zjistene elementy ve smycce:

Jak vidite, zde muzete specifikovat LocalName i Namespace pro rozliseni. A nakonec jeden priklad jak parsovat xml se vnorenou strukturou:

Jinak mi to nefungovalo a vlastne to neni zadna skoda. Pracuje se s tim trochu jinak ale je hlavni ze to funguje. Ted uz jen at to funguje vzdy a ne jen nekdy! 🙂

Leave a Reply