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); }