NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.

Diskuze – Lekce 7 - Čtení XML SAXem v C# .NET

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar

Člen
Avatar
:15.10.2012 19:14

Nazdar,

díky za super tutoriály.
Kdy je v plánu vydat zpracování XML pomocí DOM?

Editováno 15.10.2012 19:15
 
Odpovědět
15.10.2012 19:14
Avatar
Yahkem
Tvůrce
Avatar
Yahkem:6.6.2014 17:24

registrovan = DateTime.Parse(xr­.Value);

tenhle řádek zlobí a kompiler vyhazuje hlášku
"Řetězec nebyl rozpoznán jako platný typ DateTime."

vzpisuje to i poté, co jsem prachsprostě okopčil všechen kód odsud...

 
Odpovědět
6.6.2014 17:24
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Yahkem
Jan Vargovský:6.6.2014 17:48

Zamysli se nad tou chybou, pak to třeba dojde.

 
Odpovědět
6.6.2014 17:48
Avatar
Yahkem
Tvůrce
Avatar
Yahkem:7.6.2014 15:57

Dik za super radu, uz to funguje

 
Odpovědět
7.6.2014 15:57
Avatar
Petr Šťastný
Tvůrce
Avatar
Petr Šťastný:12.5.2016 11:34

Ahoj, potrebuju pomoct. Mam XML soubor

<?xml version="1.0" encoding="utf-8"?>
<Rise Datum="06:20:50-05.05.2016">
  <Uzivatel>EAAAAJnv4qf4VJqGw1or6jR55lpVmwjzte5JVVSvUuXY1JEY</Uzivatel>
  <Rise_Jmeno>EAAAAD5gVojQLRQY2oFKfsntO4IxO+UtxHKNSJJdP4/8nSSj</Rise_Jmeno>
  <Rise_Penize>EAAAANU3j2ivL4mqVa18GZAI+S/Mg71pOQKbh7arG+98JJsf</Rise_Penize>
  <Rise_Demokr>EAAAAHzSmASCOqlOTt8YgjTXhCKWN/GTLiNhSwBTxXDKfn7S</Rise_Demokr>
  <Rise_Uzemi>EAAAAOgnw+l+AzhVXniu8DNYUxka2IejIKmk9+77OBWJBABF</Rise_Uzemi>
  <Obyv_Chudina>EAAAAPTKqQvLYg8/QE3SjwhF2AqCs1DYHiJtpZv35Bge5u7t</Obyv_Chudina>
  <Vern_Chudina>EAAAAJ4vKnalsv04NFVWibbPFmswHdJcaJLsWosPamLyQRRl</Vern_Chudina>
  <Obyv_Mestane>EAAAAAPV62xYqXEQh/zwsC2zMlPnrmiZbBDSf0ssiYf9PgLs</Obyv_Mestane>
  <Vern_Mestane>EAAAABu8qAsN63413I7ScTjJU8kA6UsGHoydBczwUlAMmc0y</Vern_Mestane>
  <Obyv_Intelig>EAAAAKn6zCuex4DZQVNfjSsmTv2eRANKcEdnEla2NCny/ARy</Obyv_Intelig>
  <Vern_Intelig>EAAAABZhhQ5cN87bqboZHQ8thzmiKqRa2ZORoZe3JPU2AQ2o</Vern_Intelig>
  <Pocet_Armada>EAAAAO+eNvDteclkeuVXlvF54dbeANu2hVkHFJvB3vtG9VjY</Pocet_Armada>
  <Vern_Armada>EAAAAFkLu1o8Fm29xke6xcAdFd4b4fxYeIT9zT2pahtBSEOx</Vern_Armada>
  <Pocet_Tpol>EAAAAIfudicHc+PhwGRW5UrZwKtHX3UHSZ3QH6LR0RwRWi3Q</Pocet_Tpol>
  <Vern_Tpol>EAAAADb3ah6ZklTAA/QX6ze/eSn2gUvCRFv3Mpqt38ORhC57</Vern_Tpol>
  <Pocet_BodyG>EAAAAFzce9RoqdbluxSkDz7TlGQpSloWWtjamrTmE7qIq4QH</Pocet_BodyG>
  <Vern_BodyG>EAAAABraj7d9Q+C4CoERgc+JuyIfpNeQIqOvDzgMng+qVse5</Vern_BodyG>
</Rise>

Jak nactu treba Uzivatel nebo Rise_Jmeno? Tenhle kod nacte jenom datum rise:

using (XmlReader xr = XmlReader.Create(cesta + soubor))
            {
                while (xr.Read()) {
                    if(xr.NodeType == XmlNodeType.Element)
                    {
                        if (xr.Name == "Rise")  // Jestlize to je rise nacti datum a uloz ho do promenny
                        {
                            Rise_Datum = (xr.GetAttribute("Datum"));
                        }
                    }else if(xr.NodeType == XmlNodeType.Text)
                    {
                        switch (xr.Name)
                        {
                            case "Uzivatel":
                                Uzivatel = Crypto.DecryptStringAES(xr.Value, Klic.Remove(5, 2));
                                break;
                                ...
 
Odpovědět
12.5.2016 11:34
Avatar
Garrom Orc Shaman:26.9.2016 15:43

na jakou verzi .net framevorku to funguje ?
zkouším verzi 4.0 a dostávám z tohoto kódu

public static void Main(string[] args)
{
        using (XmlReader xr = XmlReader.Create(@"soubor.xml"))
        {

        }
}

tyto chyby :

  • V oboru názvů XmlReader neexistuje název typu nebo oboru názvů Create (pravděpodobně jste neuvedli odkaz na sestavení). (CS0234)
  • XmlReader je obor názvů, ale používá se jako typ.
Odpovědět
26.9.2016 15:43
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Martin Petrovaj
Tvůrce
Avatar
Martin Petrovaj:25.6.2017 20:09

Dobrý deň, asi som debil, ale mohol by mi niekto povedať, čo je na tomto zle? ID sa načítava správne, ale meno ani dátum registrácie nie (C# z nejakého dôvodu číta stále prázdne stringy). Skúšal som všetko možné, pridať aj odobrať z XML úvodzovky, brať každý Node ako Element aj rozlišovať Node a Text, ale nič nepomáha.

Zdroják:

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            List<User> users = new List<User>();
            int? id = null;
            string name = null;
            DateTime? registered = null;

            using (XmlReader xr = XmlReader.Create(@"d:/plocha/Python/users.xml"))
            {
                while (xr.Read())
                {
                    if (xr.NodeType == XmlNodeType.Element)
                    {
                        switch (xr.Name)
                        {
                            case "user":
                                id = int.Parse(xr.GetAttribute("id"));
                                break;
                            case "name":
                                name = xr.Value;
                                break;
                            case "registered":
                                try
                                { registered = DateTime.Parse(xr.Value); }
                                catch { }
                                break;
                        }
                    }

                    if (id.HasValue && name != null && registered.HasValue)
                    {
                        users.Add(new User((int)id, name, (DateTime)registered));
                        id = null;
                        name = null;
                        registered = null;
                    }
                }
            }

            foreach (User u in users) { Console.WriteLine(u.ToString()); }
            Console.WriteLine(users.Count);
            Console.ReadKey();
        }
    }

    public class User
    {
        public int id { get; protected set; }
        public string name {get; protected set; }
        public DateTime registered { get; protected set; }

        public User(int id, string name, DateTime registered)
        {
            this.id = id;
            this.name = name;
            this.registered = registered;
        }

        public override string ToString()
        {
            return String.Format("{0} {1} {2}", id, name, registered);
        }
    }
}

XML:

<?xml version="1.0" encoding="utf-8"?>
<users>
  <user id="1">
    <name>"Pavel Slavik"</name>
    <registered>"21.3.2000"</registered>
  </user>
  <user id="2">
    <name>"Jan Novak"</name>
    <registered>"30.10.2012"</registered>
  </user>
  <user id="3">
    <name>"Tomas Marny"</name>
    <registered>"12.1.2011"</registered>
  </user>
</users>

Za pomoc vopred ďakujem.

Odpovědět
25.6.2017 20:09
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
FoByCZ
Člen
Avatar
Odpovídá na Martin Petrovaj
FoByCZ:31.7.2017 4:47

Protože máš podmínku jen na XmlNodeType.E­lement. Ty ostatní věci musíš načítat z XmlNodeType.Text. Projdi si ještě jednou tento díl tutoriálu ;)

Editováno 31.7.2017 4:49
 
Odpovědět
31.7.2017 4:47
Avatar
FoByCZ
Člen
Avatar
Odpovídá na Garrom Orc Shaman
FoByCZ:31.7.2017 4:48

Možná Ti chybí:

using System.Xml;
 
Odpovědět
31.7.2017 4:48
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na FoByCZ
Martin Petrovaj:31.7.2017 12:35

Pardon, som proste dilino :) Nevšimol som si, že obsah vnorených elementov je typu Text. A to aj keď ma mohla kopnúť múza už pri traceovaní, kde sú údaje o každom node :D Každopádne ďakujem za pomoc.

Odpovědět
31.7.2017 12:35
if (this.motto == "") { throw new NotImplementedException(); }
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 10 zpráv z 15.