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.“
Du hast ja auch keine Attribute drin. Klar gibt GetAttributes nichts zurück.
Wert von Knoten in XML-Datei auslesen
Xml mit Xdocument auslesen
XML Datei auslesen und in Excel schreiben
xml auslesen und später in sql datenbank speichern
LINQ to XML | XML auslesen Problem
XML Datei lesen und als integer Variable speichern.
...
haben nicht geholfen?
Gruss
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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 |
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.“
Du weißt aber schon dass deine Lösung etwas ganz anderes macht als dein erster Code?
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)