tutorials.de Buch-Aktion 02/2012
Like Tree4Danke
  • 1 Beitrag von napstermania
  • 1 Beitrag von napstermania
  • 1 Beitrag von deepthroat
  • 1 Beitrag von deepthroat
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
695
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Henig Henig ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    70
    Guten Tag liebe Leute,

    Heute bin ich mal mit C# unterwegs und mir fehlen mal komplette ansätze...

    Ich habe eine XML-Datei die Hunderter, Zehner und Einer Definieren soll.
    Das HunderterElement beinhaltet das Attribut 'Wert' und das Element Zehner, was wiederrum auch ein Attribut 'Wert' enthält, so wie das das Element Einer, was AUCH wiederrum das Attribut 'Wert' enthält.
    Folgender Code:
    Code xml:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    <?xml version="1.0" encoding="UTF-8"?>
    <Layer>
        <Hunderter>
            <Zehner>
                <Einer>
                    <Wert>2</Wert>
                </Einer>
                <Wert>5</Wert>
            </Zehner>
            <Wert>6</Wert>
                 </Hunderter>
    </Layer>

    Jetzt will ich in meiner Console ausgeben, das der Hunderter den Wert X besitzt, der Zehner seinen Wert und der Einer Seinen Wert.

    Bisher habe ich das mit dem XmlReader versucht um das erste Element ausfindig zu machen (Hunderter). Wenn dies geschehen ist soll er den in 'Hunderter' stehenden 'Wert' an eine Stringvariable zurückgeben.

    Wenn ich jetzt aber Folgendes mache:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    XmlReader reader;
    reader.Create("C:/test.xml");
    string[] Werte = {"Hunderter", "Zehner", "Einer"}
    int index = 0;
     
     
    while(index-1 != Werte.Length)
    {
     
    while(reader.Read())
    {
     
    if(string.Compare(reader.Name.ToString(), Werte[i]))
    {
    reader.ReadNextElement("Wert");
    Console.WriteLine(reader.ReadString());
    }
     
    }
     
    index = index +1;
    }

    Bekommt er ja nicht den Wert von dem Hunderter sondern den ersten Wert den er findet und das ist ja der Einer.



    Jetzt wurde mir vorgeschlagen das ich doch XmlDocument nutzen kann aber damit kenne ich mich in keinster weise aus... ich hab mir das mal angesehen aber irgentwie stehe ich da komplett auf dem schlauch...

    erbitte dringent Hilfe danke Vielmals


    PS: Ich arbeite Mit Visual Studio 2005
     

  2. #2
    napstermania napstermania ist offline Mitglied Silber
    Registriert seit
    Jul 2004
    Ort
    Deutschland
    Beiträge
    95
    Hallo Henig,

    ich bin mir jetzt nicht sicher ob im VS2005 das unterstützt wird, aber der folgende Code sollte dir schonmal weiter helfen.

    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    static void Main(string[] args)
            {
                XmlTextReader reader = new XmlTextReader("test.xml");
                var xmlContent = XElement.Load(reader);
     
                var xmlSectionH = xmlContent.Element("Hunderter");
                var xmlKeyH = xmlSectionH.Element("Wert");
                string valueH = xmlKeyH.Value;
                Console.WriteLine("Hunderter wert: " + valueH);
     
                var xmlSectionZ = xmlSectionH.Element("Zehner");
                var xmlKeyZ = xmlSectionZ.Element("Wert");
                string valueZ = xmlKeyZ.Value;
                Console.WriteLine("Zehner wert: " + valueZ);
     
                var xmlSectionE = xmlSectionZ.Element("Einer");
                var xmlKeyE = xmlSectionE.Element("Wert");
                string valueE = xmlKeyE.Value;
                Console.WriteLine("Einer wert: " + valueE);
                
                Console.ReadLine();
            }

    Gruß
    Henig bedankt sich. 

  3. #3
    Henig Henig ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    70
    okay, soweit sogut verständlicher code danke aufjedenfall schonmal dafür =)

    aber ich bekomme bei den "var"s die Fehlermeldung:
    Fehler 1 Der Typ- oder Namespacename "var" konnte nicht gefunden werden. (Fehlt eine using-Direktive oder ein Assemblyverweis?) C:\Dokumente und Einstellungen\esn.lua\Eigene Dateien\Visual Studio 2005\Projects\XmlDocument Test\XmlDocument Test\Program.cs 14 13 XmlDocument Test
    muss ich noch irgentwas hinzufügen, damit das var für den compiler verständlich ist?
     

  4. #4
    napstermania napstermania ist offline Mitglied Silber
    Registriert seit
    Jul 2004
    Ort
    Deutschland
    Beiträge
    95
    Hallo,

    der Datentyp var ist erst in .NET 3.5 verwendbar. Also erst ab VS2008. Aber wenn du anstatt var direkt das XElement nimmst sollte es auch gehen.

    Gruß
    Henig bedankt sich. 

  5. #5
    Henig Henig ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    70
    Danke dir dafür =)

    Ich habe jetzt noch einen zweiten weg gefunden, den ich über XmlDocument gelöst habe:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    XmlDocument doc = new XmlDocument();
    doc.Load(test.txt);
     
    System.Xml.XmlNode node;
    System.Xml.XmlElement root = doc.DocumentElement;
     
    node = root.SelectSingleNode("//Hunderter/Wert");
    Console.WriteLine(node.InnerXml);
     
    node = root.SelectSingleNode("//Zehner/Wert");
    Console.WriteLine(node.InnerXml);
     
    node = root.SelectSingleNode("//Einer/Wert");
    Console.WriteLine(node.InnerXml);

    Ich freu mich grade totel das ich den mist endlich zusammengewurstelt bekommen habe danke euch, die sich mein Problem wenigstens angesehen haben
     

  6. #6
    Henig Henig ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    70
    Neues Problem aber gleiches Thema....
    Ich arbeite grade an ner neuen XML-Datei, für die ich mich jetzt in die XmlDocument-Klasse eingelesen habe...

    Ich habe in den Hunderter Zehner und Einer elementen jeweils ein ID-Attribut.

    Code xml:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    <Layer>
    <Hunderter ID = 1>
    <Zehner ID = 2>
    <Einer ID = 3>
    <WertElement>
    <Wert>2</Wert>
    </WertElement>
    </Einer>
    <WertElement>
    <Wert>2</Wert>
    </WertElement>
    </Zehner>
    <WertElement>
    <Wert>2</Wert>
    </WertElement>
    </Hunderter>
    </Layer>

    Wie komme ich jetzt mithilfe von XmlDocument z.B. auf den Inhalt von (In XPath ausgedrückt: "/Layer/Hunderter/WertElement/Wert", ohne XPath selber zu nutzen und mithilfe der ID also SQL-Mäßig: " WHERE ID = 1"! Das Programmd as ich schreibe will ich variabel haben udn evtl noch teusender etc hinzufügen


    Vielen dankfür eure Hilfe und Grüße
     

  7. #7
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Hi.
    Zitat Zitat von Henig Beitrag anzeigen
    Wie komme ich jetzt mithilfe von XmlDocument z.B. auf den Inhalt von (In XPath ausgedrückt: "/Layer/Hunderter/WertElement/Wert", ohne XPath selber zu nutzen
    Warum willst du dafür nicht XPath nutzen?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  8. #8
    Henig Henig ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    70
    weil ich mithilfe von XPath nur die nodes herausfinden kann und nicht die elemente an sich... Ich habe eine funktion an die ich ein Element übergeben muss und weiß auch nicht ob/wie ich ein XmlNode zu einem XmlElement umwandeln kann.
     
    Nicht Hening nicht Henning nein Henig... wie Honig... nur mit E ;)

  9. #9
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Zitat Zitat von Henig Beitrag anzeigen
    weil ich mithilfe von XPath nur die nodes herausfinden kann und nicht die elemente an sich... Ich habe eine funktion an die ich ein Element übergeben muss und weiß auch nicht ob/wie ich ein XmlNode zu einem XmlElement umwandeln kann.
    Ein XmlElement ist ein XmlNode. (Vererbung)

    Falls du mit dem XPath ein Element ansprichst, wird auch ein XmlElement zurückgeliefert:
    Code csharp:
    1
    
    XmlElement e = (XmlElement)doc.SelectSingleNode("/Layer/Hunderter/WertElement/Wert");
    Gruß
    Henig bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  10. #10
    Henig Henig ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    70
    Vielen dank für die info das bringt mich schonmal ein stück weiter meine funktion allerdings mag es nicht, dass ich aus einem XmlNode-Array eine instanz zu einem XmlElement caste...

    Code csharp:
    1
    2
    
    SignedXml sx = null;
    sx.LoadXml((XmlElement)nodeArray[0]);
    Unbekannte Transformation gefunden.
    Edit: nodeArray ist natürlich ein XmlNode[]
    Geändert von Henig (09.08.10 um 11:33 Uhr)
     
    Nicht Hening nicht Henning nein Henig... wie Honig... nur mit E ;)

  11. #11
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Zitat Zitat von Henig Beitrag anzeigen
    meine funktion allerdings mag es nicht, dass ich aus einem XmlNode-Array eine instanz zu einem XmlElement caste...

    Code csharp:
    1
    2
    
    SignedXml sx = null;
    sx.LoadXml((XmlElement)nodeArray[0]);
    Code :
    1
    
    Unbekannte Transformation gefunden.
    Wo kommt denn diese Meldung her?

    Dein Code kann so eh nicht funktionieren, du hast keine Instanz erstellt.

    Poste den kompletten relevanten Code-Teil.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  12. #12
    Henig Henig ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    70
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    try
    {
       sx.LoadXml((XmlElement)nodeArray[0]);
    }
       catch (Exception exception1) // Hier wird der Fehler beim Debugegn angezeigt entsteht also in Z.3
    {
       bool flag = false;
       return flag;
    }
    Das ganze ist in einer komplexen Funktion verschachtelt
    Ich habe jetzt nur keine Ahnung, wieso das so nicht funktioniert (Blättere grade in der doku herum finde aber nichts)):.
     
    Nicht Hening nicht Henning nein Henig... wie Honig... nur mit E ;)

  13. #13
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Hi.

    Wenn es sich um eine Exception handelt, dann kopiere die Details der Exception in die Zwischenablage und füge es hier ein.

    Laut Doku (http://msdn.microsoft.com/en-us/libr...l.loadxml.aspx) wirft die LoadXml Methode Exceptions aus diesen Gründen:
    Code :
    1
    2
    3
    4
    5
    
    The value parameter does not contain a valid SignatureValue property.
     
    -or-
     
    The value parameter does not contain a valid SignedInfo property.
    Du hast also ein falsches Element an die Methode übergeben.

    Gruß
    Henig bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  14. #14
    Henig Henig ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    70
    Ok das tut mir jetzt voll leid und ist mir auch total peinlich aber du hast recht... ich hab das Signature-Element nicht mehr angegeben, weil ich davon ausgegangen bin, dass meine Funktion sich die Sugnatur aus dem übergeordnetem Element selber holt... dabei hab ich dann ein null übergeben und das findet der nicht so toll

    danke dir =)

    //Edit: Doch nicht! Der richtige Pfad wurde angegeben das Problem ist, dass ich den alten Microsoft-Entschlüsseöungsstandart benutzt habe und damit einen neueren entschlüsseln wollte. Deshalb ist auch die Transformation Fehlerhaft...
    Geändert von Henig (10.08.10 um 10:29 Uhr)
     
    Nicht Hening nicht Henning nein Henig... wie Honig... nur mit E ;)

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 20.11.10, 21:09
  2. Problem: Werte aus Datei in Map einlesen?
    Von LadyMarion im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 12.08.08, 10:36
  3. Werte aus einer Datei einlesen...
    Von Paule123x im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 02.07.08, 12:28
  4. Antworten: 7
    Letzter Beitrag: 22.01.08, 20:06
  5. Hex-werte aus Datei in Integer einlesen
    Von genfrosch im Forum Java
    Antworten: 2
    Letzter Beitrag: 08.07.05, 15:14