Diskuze: Xml a XmlNodeList

C# .NET .NET (C# a Visual Basic) Xml a XmlNodeList American English version English version

Avatar
no.good
Člen
Avatar
no.good:

Ahoj chtěl bych se zeptat mám následující XML soubor.

<root>
<table name="Customer">
        <column name="Name"></column>
        <column name="Surname"></column>
        <column name="Birth"></column>
</table>
<table name="Address">
        <column name="Street"></column>
        <column name="City"></column>
        <column name="Zip"></column>
</table>
<table name="Contact">
        <column name="Phone1"></column>
        <column name="Phone2"></column>
        <column name="Mobil"></column>
        <column name="Email"></column>
</table>
</root>

a následující programový kód:

XmlDocument doc = new XmlDocument();
            doc.Load("file.xml");

            XmlNodeList tables = doc.SelectNodes(@"//table");           //první xpath

            foreach (XmlNode table in tables)
            {
                XmlNodeList columns = table.SelectNodes(@"/column/@name");              //druhý xpath

                foreach (XmlNode column in columns)
                {
                    Console.WriteLine(column.Value);
                }
            }

Nejdříve získám elementy s tabulkami pomocí xpath a pak je procházím cyklem foreach. Následně chci získat názvy sloupců pro každý blok s tabulkou, ale pokud použiji následující xpath @"/column/@name", tak se mi nevrátí nic. Pokud použiji tento xpath @"//column/@name" se dvěmi lomítky na začátku, tak to vypadá, že to prochází celou strukturu z instance doc a ne z instance **table. Jak je toto možné udělat v C#, aby table.SelecNodes program procházel jen vybraný blok **table ** a ne celou strukturu xml z **doc?

Chtěl bych se přímo dotazovat pomocí xpath na tento kód

<table name="Customer">
        <column name="Name"></column>
        <column name="Surname"></column>
        <column name="Birth"></column>
</table>

Díky

 
Odpovědět 12. května 22:07
Avatar
Odpovídá na no.good
Martin Turner:

S DOMem moc zkušeností nemám, ale co zkusit definovat druhý xpath pouze výrazem "column" a v následném cyklu získávat jméno sloupce pomocí colmun.Name? Nevrací výraz column.Value hodnotu sloupce a ne jeho jméno?

Nechtěl bys s XML dokumentem pracovat raději pomocí LINQ? Přijde mi o moc přehlednější.
http://www.itnetwork.cz/…arp-tutorial

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +2 13. května 7:28
Avatar
Odpovídá na no.good
Michal Štěpánek:

K čemu je ten druhý zavináč u toho

@"/column/@name"

?

Nahoru Odpovědět 13. května 7:51
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
no.good
Člen
Avatar
Odpovídá na Michal Štěpánek
no.good:

ten druhý zavináč označuje atribut v tom elementu, př. name="Phone1"

 
Nahoru Odpovědět 13. května 20:11
Avatar
no.good
Člen
Avatar
Odpovídá na Martin Turner
no.good:

Díky za odpověď, jinak column.Name by vrátilo název toho atributu, takže v tomhle případě "name"

 
Nahoru Odpovědět 13. května 20:13
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 5 zpráv z 5.