IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
no.good
Člen
Avatar
no.good:12.5.2016 22:07

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.5.2016 22:07
Avatar
Odpovídá na no.good
Martin Turner:13.5.2016 7:28

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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
13.5.2016 7:28
Avatar
Odpovídá na no.good
Michal Štěpánek:13.5.2016 7:51

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

@"/column/@name"

?

Nahoru Odpovědět
13.5.2016 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:13.5.2016 20:11

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

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

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.5.2016 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.