Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

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
Posledné komentáre sú na spodnej časti poslednej stránky.
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é
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...

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.

Avatar
Yahkem
Tvůrce
Avatar
Yahkem:7.6.2014 15:57

Dik za super radu, uz to funguje

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;
                                ...
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ť
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ť
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é
Avatar
FoByCZ
Člen
Avatar
Odpovedá na Garrom Orc Shaman
FoByCZ:31.7.2017 4:48

Možná Ti chybí:

using System.Xml;
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ť
if (this.motto == "") { throw new NotImplementedException(); }
Posledné komentáre sú na spodnej časti poslednej stránky.
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.

Zobrazené 10 správy z 15.