webForumDet fria alternativet

Spara data kontinuerligt till XML

.NET

0 svar · 335 visningar · startad av tHorSeYE

Medlem sedan juli 200255 inlägg
Frågan#1

Jag har information som jag tänkte spara som XML, och jag kodar i C#. Informationen skickas från sensorer, och XML-filen uppdateras då ny data finns tillgänglig.

Nu till ett litet krux som jag har stött på. Om vi tar ett exempel på hur en XML-fil som jag har ser ut:

<?xml version="1.0" encoding="UTF-8" ?> 
<eeml xmlns="http://www.eeml.org/xsd/005">
<environment updated="2008-10-07T09:58:39.6754623Z" xmlns="">
<data id="1">
  <tag>light</tag> 
  <value>551</value> 
  </data>
  </environment>
</eeml>

I taggen "environment" får jag ett xmlns-attribut, utan att jag har bett om det. Förmodligen så har jag missat att förstå något när jag har skrivit koden för detta, och tänkte höra om någon kan skicka mig i rätt riktning. Jag vet inte om min kod för att generera XMLen är vettig. Så här ser den ut i nuläget:


private void SaveData(SensorData s)
{ 
// Create a new XML-file for every day
                string filename = "sensor-" + DateTime.Now.Date.ToString().Substring(0, 10) + ".xml";
                XmlDocument xmlDoc = new XmlDocument();

                try
                {
                    xmlDoc.Load(filename);
                }
                catch (System.IO.FileNotFoundException)
                {
                    // If file is not found, create a new XML file
                    XmlTextWriter xmlWriter = new XmlTextWriter(filename, System.Text.Encoding.UTF8);
                    xmlWriter.Formatting = Formatting.Indented;
                    xmlWriter.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
                    xmlWriter.WriteStartElement("eeml", "http://www.eeml.org/xsd/005");
                    xmlWriter.Close();
                    xmlDoc.Load(filename);
                }

                XmlNode    root         = xmlDoc.DocumentElement;
                XmlElement environment  = xmlDoc.CreateElement("environment"); 
                XmlElement data         = xmlDoc.CreateElement("data");
                XmlElement tag          = xmlDoc.CreateElement("tag");
                XmlElement valueTag     = xmlDoc.CreateElement("value");

                root.PrependChild(environment);

                environment.SetAttribute("updated", XmlConvert.ToString(s.TimeStamp, XmlDateTimeSerializationMode.Utc));
                environment.AppendChild(data);

                data.SetAttribute("id", s.Channel.ToString());
                data.AppendChild(tag);
                data.AppendChild(valueTag);

                tag.InnerText = s.NameTag; 

                valueTag.InnerText = s.Value.ToString();

                xmlDoc.Save(filename);
}

Såå... Om jag vill kunna uppdatera min XML då ny data kommer från sensorer, samt slippa xmlns-attributet på environment-taggen, hur bör jag göra?

391 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
127 ms — hämta statistik (db)
131 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)