S saw Medlem sedan mars 2001 1 880 inlägg Frågan 29 juli 2010 18:29 #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.
G GunnarD Medlem sedan juni 2001 4 290 inlägg 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>
S saw Medlem sedan mars 2001 1 880 inlägg 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