webForumDet fria alternativet

Skriva och läsa XML-filer

.NET

2 svar · 623 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Jag har följande kod

 string sString = Application.StartupPath.ToString() + "\\Settings.xml";

            FileStream fs = new FileStream(sString, FileMode.Create);
            XmlWriter w = XmlWriter.Create(fs);

            w.WriteStartDocument();
            w.WriteStartElement(sFactionPath);

            w.WriteAttributeString(sFactionPath, null);
            w.WriteElementString("path", sPath);
            w.WriteEndElement();

            w.WriteEndDocument();
            w.Flush();
            fs.Close();

som generera detta

<?xml version="1.0" encoding="utf-8" ?> 
- <Faction_path Faction_path="">
  <path>D:\Sparade_Filer\förSpel\TotalWar\Napoleon\Factions\
Oldenburg_Mecklenburg_Saxony_Hessen</path> 
  </Faction_path>

Jag för följande felmedelande
XML document must contain a root level element.
Nu är det så att jag kommer att behöva uppdatera och det med andra
startelement/attripute, kan jag använda samma teknik?

Jag har också letat men hittar inte på vilket sätt som jag skall göra för att
kunna läsa detta, förslag motages tacksamt.

Medlem sedan juni 20014 290 inlägg
#2

Du behöver ett "element" som hela din xml data finns i:

Ex. i nedanstående kod <Spel></Spel>

<?xml version="1.0" encoding="utf-8" ?> 
<Spel>
- <Faction_path Faction_path="">
  <path>D:\Sparade_Filer\förSpel\TotalWar\Napoleon\Factions\
Oldenburg_Mecklenburg_Saxony_Hessen</path> 
  </Faction_path>
</Spel>
Medlem sedan mars 20011 880 inlägg
#3

Jo jag hittade lite mera info så nu gör jag så här:

//skapa dokumentet
public static string WriteXMLDocument(string what, string path)
        {//skriva XML fungerar bra
            string sDoc = Application.StartupPath.ToString() + "\\Settings.xml";
            if (what == "new")
            {
                XmlWriterSettings settings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true };
                XmlWriter writer = XmlWriter.Create(sDoc, settings);
                writer.WriteStartElement("settingdoc");
                writer.WriteStartElement("Faction");
                writer.WriteStartElement("Faction_Path");
                writer.WriteString("Factionpath");
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteStartElement("Mod");
                writer.WriteStartElement("Mod_Path");
                writer.WriteString("Modpath");
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndDocument();
                writer.Flush();
                writer.Close();
            }
            return what;
        } 
//Läsa dokumentet
public static string ReadXMLDocument(string what)
        {//läsa XML fungerar bra
            string sDoc = Application.StartupPath.ToString() + "\\Settings.xml";
            XmlReaderSettings settings = new XmlReaderSettings { IgnoreComments = true, IgnoreWhitespace = true };
            XmlReader reader = XmlReader.Create(sDoc, settings);
            string sText = "";
            string newText = "";
            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    sText = reader.Name;
                    if (sText == what)
                    {
                        newText = reader.ReadElementString();
                    }
                }
            }
            reader.Close();
            return newText;
        }

//uppdatera dokumentet
public static string UppdateXML(string what, string path)
        {//Uppdatera XML fungerar bra
            try
            {
                string sDoc = Application.StartupPath.ToString() + "\\Settings.xml";
                XmlDocument myXmlDocument = new XmlDocument();
                myXmlDocument.Load(sDoc);
                XmlNode node;
                node = myXmlDocument.DocumentElement;
                foreach (XmlNode node1 in node.ChildNodes)
                    foreach (XmlNode node2 in node1.ChildNodes)
                        if (node2.Name == what)
                        {
                            node2.InnerText = path;
                        }
                myXmlDocument.Save(sDoc);
            }
            catch (Exception fel)
            {
                MessageBox.Show(fel.Message);
            }
            return what;
        }

Det fungerar nu kanon.
(Jag la in koderna om någon annan fundera på liknande). :bire

257 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)