IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 7. diel - Čítanie XML SAXom v C# .NET

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
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?

Editované 15.10.2012 19:15
 
Odpovedať
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...

 
Odpovedať
6.6.2014 17:24
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovedá na Yahkem
Jan Vargovský:6.6.2014 17:48

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

 
Odpovedať
6.6.2014 17:48
Avatar
Yahkem
Tvůrce
Avatar
Yahkem:7.6.2014 15:57

Dik za super radu, uz to funguje

 
Odpovedať
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;
                                ...
 
Odpovedať
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.
Odpovedať
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.

Odpovedať
25.6.2017 20:09
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
FoByCZ
Člen
Avatar
Odpovedá 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 ;)

Editované 31.7.2017 4:49
 
Odpovedať
31.7.2017 4:47
Avatar
FoByCZ
Člen
Avatar
Odpovedá na Garrom Orc Shaman
FoByCZ:31.7.2017 4:48

Možná Ti chybí:

using System.Xml;
 
Odpovedať
31.7.2017 4:48
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovedá 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.

Odpovedať
31.7.2017 12:35
if (this.motto == "") { throw new NotImplementedException(); }
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!