Gå til innhold

C#: Trenger hjelp med XML fil redigering


Anbefalte innlegg

OK, problemet denne gang er at jeg ikke vet hvordan jeg kan legge til ulike noder i en xml. Her er XML filen:

<?xml version="1.0" encoding="utf-8" ?>
<Data>
<Accounts>
 <User Name="*Sensurert*" Password="1234"></User>
 <User Name="*Sensurert*" Password="4321"></User>
 <User Name="*Sensurert*" Password="abcd"></User>
 <User Name="*Sensurert*" Password="dcba"></User>
 <User Name="*Sensurert*" Password="1ab2"></User>
 <User Name="*Sensurert*" Password="3c4d"></User>
</Accounts>
<CurrentPlayers>
 <Player Name="*Sensurert*" Money="1000" Job="Civilian" Alive="True" HasVoted="True"></Player>
 <Player Name="*Sensurert*" Money="2000" Job="God" Alive="False" HasVoted="True"></Player>
 <Player Name="*Sensurert*" Money="3000" Job="Doctor" Alive="True" HasVoted="True"></Player>
 <Player Name="*Sensurert*" Money="4000" Job="Mafia" Alive="True" HasVoted="True"></Player>
 <Player Name="*Sensurert*" Money="5000" Job="Detective" Alive="True" HasVoted="True"></Player>
 <Player Name="*Sensurert*" Money="6000" Job="Mafia" Alive="True" HasVoted="True"></Player>
</CurrentPlayers>
 <Game>
<TimeOfDay>Day</TimeOfDay>
 </Game>
</Data>

Det jeg vil gjøre, er å legge til flere "Player" noder i CurrentPlayers etterhvert som folk melder seg på. Her er en av flere ting jeg har prøvd:

		XmlDocument data = new XmlDocument();
	data.Load(*URL til xml fil*);

	XmlNode playerNode = data.CreateNode("element", "Player","");

	XmlAttribute playerAttribute = data.CreateAttribute("Name");
	playerAttribute.Value = Session["Name"].ToString();
	playerNode.Attributes.Append(playerAttribute);

	playerAttribute = data.CreateAttribute("Money");
	playerAttribute.Value = "0000";
	playerNode.Attributes.Append(playerAttribute);

	playerAttribute = data.CreateAttribute("Job");
	playerAttribute.Value = "Undefined";
	playerNode.Attributes.Append(playerAttribute);

	playerAttribute = data.CreateAttribute("Alive");
	playerAttribute.Value = "True";
	playerNode.Attributes.Append(playerAttribute);

	playerAttribute = data.CreateAttribute("HasVoted");
	playerAttribute.Value = "False";
	playerNode.Attributes.Append(playerAttribute);


	data.FirstChild.ChildNodes[1].AppendChild(playerNode);

Koden over kaster et NullReferenceException på siste linje. Når jeg forandrer siste linje til:

data.ChildNodes[1].AppendChild(playerNode);

Virker det som om det fungerer, men filen forblir uforandret. Takker som vanlig på forhånd for all hjelp =).

Endret av Velena
Lenke til kommentar
Videoannonse
Annonse

Errrr, tror nok jeg glemte det ja. Er det ikke data.Save()?

Edit:

XmlTextWriter writer = new XmlTextWriter(*Url til xml fil*, null);
	writer.Formatting = Formatting.Indented;
	data.Save(writer);

Hva er det jeg er ment å sette som parameter 1 når jeg deklarerer writer om det ikke er URLen?

Burde kanskje nevne at Kompilatoren sa ifra om at dette var feil ved å kaste en ArgumentException.

Endret av Velena
Lenke til kommentar

Beklager dobbelpost, men jeg har et nytt problem som jeg ikke vet årsaken til: Det jeg prøver å gjøre er å slette en "Player" node innenfor CurrentPlayers. Koden:

XmlNode toBeDeleted = data.SelectSingleNode("/Data/CurrentPlayers/Player[@Name='"+Session["Name"].ToString()+"']");
toBeDeleted.ParentNode.RemoveChild(toBeDeleted);
XmlTextWriter writer = new XmlTextWriter(Server.MapPath("Data.xml"), null);
	   writer.Formatting = Formatting.Indented;
	   data.Save(writer);
	   Session.Abandon();
	   Response.Redirect("Login.aspx");

. Denne koden er veldig uforutsigbar, den har virket ihvertfall en gang, men de fleste av gangene fører det til en Runtime error, eller at det rett og slett ikke skjer noen ting (Blir sendt til login.aspx, men ingen forandring i data.xml forekommer). Forslag mottas med takk.

Edit: Wow, det var så enkelt som å legge til en Writer.Close(); :blush: . Fikk ihvertfall motivasjon til å legge til mer errorhandling etter dette.

Endret av Velena
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...