Laden...

Xml Dateien values auslesen

Erstellt von wickedcsharper vor 8 Jahren Letzter Beitrag vor 8 Jahren 3.133 Views
wickedcsharper Themenstarter:in
160 Beiträge seit 2008
vor 8 Jahren
Xml Dateien values auslesen

verwendetes Datenbanksystem: <xml>

Hallo zusammen. Habe folgende XML Struktur:

<?xml version="1.0" encoding="utf-8"?>
<Waage>
	<COM> 
		<PortName>COM1</PortName>
		<BaudRate>9600</BaudRate>
		<DataBits>8</DataBits>
		<StopBits>One</StopBits>
		<Handshake>None</Handshake>
		<Parity>None</Parity>
		<ReadTimeout>500</ReadTimeout>
	</COM>
	<Program>
   </Program>
....

und folgenden Quellcode in C#. Ich möchte die Werte für die Serielle Schnittstelle rauslesen aus der XML Datei. keine Chance. Ich sitze seit 8 Stunden an dem Mist und finde nicht raus, wie das geht...konkret: wie komme ich an die Werte wie z.B. COM1 dran. Dieser Wert ist z.B. im Elementtyp PortName zu finden. Aber objXmlTextReader.Value gibt null zurück. Und der getAttribute ebenfalls .:


        public List<string> readXMLFile(string sXMLFileName) //, string sSchemaFileName
        {
            string path = getPath(sXMLFileName);
            List<string> ComSettingsList = new List<string>();

            try
            {

                XmlTextReader objXmlTextReader = new XmlTextReader(path);
                string sName = "";
                while (objXmlTextReader.Read())
                {
                    switch (objXmlTextReader.NodeType)
                    {

                        case XmlNodeType.Element:
                            sName = objXmlTextReader.Name;
                            var val = objXmlTextReader.GetAttribute("PortName");
                            var val1 = objXmlTextReader.Value;
                            switch (sName)
                            {
                                case "PortName":
                                    ComSettingsList.Add(objXmlTextReader.Value);
                                   // ComSettingsList.Add(objXmlTextReader.ReadAttributeValue);
                                    ComSettingsList.Add(objXmlTextReader.GetAttribute("PortName"));
                                    break;
                                case "BaudRate":
                                    ComSettingsList.Add(objXmlTextReader.Value);
                                    break;
                                case "DataBits":
                                    ComSettingsList.Add(objXmlTextReader.Value);
                                    break;
                                case "StopBits":
                                    ComSettingsList.Add(objXmlTextReader.Value);
                                    break;
                                case "Handshake":
                                    ComSettingsList.Add(objXmlTextReader.Value);
                                    break;
                                case "Parity":
                                    ComSettingsList.Add(objXmlTextReader.Value);
                                    break;
                                case "ReadTimeOut":
                                    ComSettingsList.Add(objXmlTextReader.Value);
                                    break;
                            }
                            
                            break;


                    }
                    
                }
            }
            catch (Exception ex)
            {
                int z = 1;

               // MessageBox.Show(ex.ToString());
            }

            return ComSettingsList;
        }

„Wenn man eine Katze auseinandernehmen will, um zu sehen, wie sie funktioniert, hat man als erstes eine nicht funktionierende Katze in den Händen.“

2.298 Beiträge seit 2010
vor 8 Jahren

Ich hätte es per XmlDocument und dessen Methoden gemacht aber seis drum.

Mit dem XmlTextReader ist das so eine Sache. - An den enthaltenen Text kommst du, wenn du den Value des nachfolgenden Elements liest:


case "PortName":
                  // read inner value
                  objXmlTextReader.Read();
                  ComSettingsList.Add(objXmlTextReader.Value);

                  ComSettingsList.Add(objXmlTextReader.GetAttribute("PortName"));
                  break;

Der Wert wird als "Text"-Node hinzugefügt. Daher ist er im "Element"-Node nicht verfügbar.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

wickedcsharper Themenstarter:in
160 Beiträge seit 2008
vor 8 Jahren

Danke für die Antworten...ich habe es jetzt über Linq gelöst:


        public void readComSettingsXML(string sXMLFileName) 
        {
            
        
            string path = getPath(sXMLFileName);
            // m_sXMLFileName = sXMLFileName;
            var main = XDocument.Load(path);

            var mes =
                (from m in main.Descendants("Waage").Descendants("COM")
                 // where (string)m.Element("PortName") != null
                 select new
                 {
                     PortName = m.Element("PortName").Value,
                     BaudRate = m.Element("BaudRate").Value,
                     DataBits = m.Element("DataBits").Value,
                     StopBits = m.Element("StopBits").Value,
                     Handshake = m.Element("Handshake").Value,
                     Parity = m.Element("Parity").Value,
                     ReadTimeout = m.Element("ReadTimeout").Value,

                 }).ToArray();

            string PortName = mes[0].PortName;
            objSerialData.PortName = PortName;

„Wenn man eine Katze auseinandernehmen will, um zu sehen, wie sie funktioniert, hat man als erstes eine nicht funktionierende Katze in den Händen.“

C
2.121 Beiträge seit 2010
vor 8 Jahren

Du weißt aber schon dass deine Lösung etwas ganz anderes macht als dein erster Code?

3.003 Beiträge seit 2006
vor 8 Jahren

Du weißt aber schon dass deine Lösung etwas ganz anderes macht als dein erster Code?

Hoffen wir mal, dass niemand unabsichtlich 'nen anonymen Typ erzeugt 😉. Abgesehen davon kann das schön in die Hose gehen, wenn das XML mal nicht alle Knoten hat - Validierung!

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)