XML Dateien



  • Hey, ich schreibe gerade eine XML Konfigurationsdatei, die momentan folgende Elemente enthält:

    config.xml:

    <?xml version="1.0"?>
    <Configurations>
      <Window>
        <Caption>My Application</Caption>
        <SizeX>1280</SizeX>
      </Window>
    </Configurations>
    

    Dazu habe ich eine Auslesefunktion geschrieben:

    //  Variablen
    XmlDocument m_oXmlDoc = null;
    string      m_strPath = "Config.cfg";
    
    public bool Read(string parent, string child, out string value)
            {
                value = "";
                // Ausleseversuch
                try
                {
                    m_oXmlDoc.Load(m_strPath);
                }
                catch
                {
                    // Fehlschlag
                    // Todo: Message Werfen!!!
                    return(false);
                }
    
                // Prüfen, ob Parent und Child tatsächlich existieren...
                for (int i = 0; i < m_oXmlDoc.LastChild.ChildNodes.Count; ++ i)
                {
                    // Wenn Parent gefunden wurde
                    if(m_oXmlDoc.LastChild.ChildNodes.Item(i).Name == parent)
                    {
                        // Dann suche nach Childs
                        XmlNode childnode = m_oXmlDoc.LastChild.ChildNodes.Item(i);
                        for (int j = 0; j < childnode.ChildNodes.Count; ++ j)
                        {
                            // Wenn Child gefunden wurde
                            if(childnode.ChildNodes.Item(j).Name == child)
                            {
                                // --> nicht möglich...
                                //XmlText textnode = (XmlText) childnode.ChildNodes.Item(j);
    
                                MessageBox.Show(textnode.Data);
                                return(true);
                            }
                        }                
                    }
                }
    
                return(false);
            }
    

    Wie kann ich das Textnode Problem umgehen?
    Ich will am ende den in der Messagebox ausgeben und ihn der Referenz value übergeben.
    Wenn ich Window und SizeX in der Read Funktion einsetzte, kommt er tatsächlich in die letzte Bedingungen, jedoch weiß ich wie gesagt nicht, wie ich den Wert auslesen kann. childnode.ChildNodes.Item(j)..value gab mir nur einen leeren String zurück



  • Warum denn so kompliziert, nimm doch einfach GetElementsByTagName 😉

    public bool Read(string parent, string child, out string value)
            {
                value = "";
                // Ausleseversuch 
                try
                {
                    m_oXmlDoc.Load(m_strPath);
                }
                catch
                {
                    // Fehlschlag 
                    // Todo: Message Werfen!!! 
                    return (false);
                }
    
                // Prüfen, ob Parent und Child tatsächlich existieren... 
                try
                {
                    XmlElement parentEl = m_oXmlDoc.DocumentElement.GetElementsByTagName(parent)[0] as XmlElement;
                    value = parentEl.GetElementsByTagName(child)[0].InnerText;
                    System.Windows.Forms.MessageBox.Show(value);
                    return (true);
                }
                catch (Exception)
                {
                    // ... nein, tun sie nicht
                }
    
                return (false);
            }
    

Anmelden zum Antworten