Sletning af kolonne i XML?

Tags:    .net

Hej,

Jeg har forsøgt at finde ud af hvordan man sletter en kolonne i et XML-dokument i ASP.NET (C#) uden held.

Det skal bruges til fx. at slette en post i en gæstebog.

Hvordan gør man det?

Med venlig hilsen
Jonas Midstrup
www.midstrup.dk



lad os sige du har det sådan her
<gæstebog>
<brugerpost>
<dato>26-05-1985 kl 12:00</dato>
<navn>Jeppe</navn>
<tekst>XML er sejt</tekst>
</brugerpost>
<brugerpost>
<dato>26-05-1985 kl 12:15</dato>
<navn>Peter</navn>
<tekst>Jeg syntes også XML er sejt</tekst>
</brugerpost>
</gæstebog>

så indlæser du først dit xml dokument sådan her:
XmlDocument dokument = new XmlDocument("dinfil.xml");

så kan du køre en loop igennem alle og tjekke for hvilken du har valgt - eks. for hver gang du udskriver en brugerpost lægger du et link til at slette, hvori du propper dato og navn:
så kan du loope igennem alle xmlnoder og slette den der har de samme værdier. Sådan har jeg gjort i en kalender jeg lavede:

XmlNodeList nl = xDoc.GetElementsByTagName("brugerpost");
foreach (XmlNode node in nl) {
if (node.SelectSingleNode("dato").InnerText.ToString() == dinvariabelfordato && node.SelectSingleNode("navn").InnerText.ToString() == dinvariabelfornavn) {
node.RemoveAll();
node.ParentNode.RemoveChild(node);
XmlTextWriter writer = new XmlTextWriter("dinfil.xml", null); // vi skal lige skrive den nye værdi tilbage til xml filen
writer.Formatting = Formatting.Indented;
dokument.Save(writer);
writer.Close();
break;
}
}




forresten næste gang skal du nok måske udlove lidt udvikler point.. det plejer at trække flere svar i land :)



forresten næste gang skal du nok måske udlove lidt udvikler point.. det plejer at trække flere svar i land :)


Mange tak for din hjælp. Nåh man er lidt grådig i dag hvad? ;) Spøg til side... Skal nok udlode nogle point næste gang :)

Jeg tror jeg har set idéen nu trods det faktum at jeg får en fejl jeg ikke helt ved hvad betyder.

Den linie hvor jeg tjekker om nyheds-artiklens ID passer med det der er i den kolonne jeg evt. vil slette ser således ud:
if (node.SelectSingleNode("Id").InnerText.ToString() == article_id.ToString())

Men så snart jeg trykker "Slet" og den kører koden i gennem stopper den ved den linie der står ovenfor og jeg får følgende fejl:
System.NullReferenceException: Object reference not set to an instance of an object.

Hvad kan årsagen være til den fejl?

Med venlig hilsen
Jonas Midstrup
www.midstrup.dk



Nåh man er lidt grådig i dag hvad? ;) Spøg til side... Skal nok udlode nogle point næste gang

Egentligt ikke, men det er sådan forummet jo hænger sammen :)
Man kan indtjene point, som man så kan bruge på at få besvaret sine egne spørgsmål :)

Og så til dit spørgsmål:
Og den fejl hører til den linje hvor din if sætning begynder?

hvis ja, så tjek lige du har deklareret node og article_id, for det lyder som om en af dem ikke er oprettet endnu (objektet peger ikke på en reference).

[Redigeret d. 07/08-04 12:48:53 af Jeppe Andersen]



Nåh man er lidt grådig i dag hvad? ;) Spøg til side... Skal nok udlode nogle point næste gang
Egentligt ikke, men det er sådan forummet jo hænger sammen :)
Man kan indtjene point, som man så kan bruge på at få besvaret sine egne spørgsmål :)

Og så til dit spørgsmål:
Og den fejl hører til den linje hvor din if sætning begynder?

hvis ja, så tjek lige du har deklareret node og article_id, for det lyder som om en af dem ikke er oprettet endnu (objektet peger ikke på en reference).

[Redigeret d. 07/08-04 12:48:53 af Jeppe Andersen]



Den fejl opstår der hvor min if sætning begynder.

Jeg har tænkt på det med om article_id og node er oprettet og det mener jeg altså at de er...

Du kan se hele koden her:
if (article_id != "")
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlPath() + "news.xml");

XmlNodeList nl = xmldoc.GetElementsByTagName("Article");

foreach (XmlNode node in nl)
{
if (node.SelectSingleNode("Id").InnerText.ToString() == article_id)
{
node.RemoveAll();
node.ParentNode.RemoveChild(node);
XmlTextWriter writer = new XmlTextWriter(xmlPath() + "news.xml", null); // vi skal lige skrive den nye værdi tilbage til xml filen
writer.Formatting = Formatting.Indented;
xmldoc.Save(writer);
writer.Close();
break;
}
}
}

Fatter virkeligt ikke hvorfor den kommer med den fejl.

- Jonas
www.midstrup.dk



Prøv article_id.ToString()



Prøv article_id.ToString()



Det har jeg forsøgt og det virker heller ikke. Det burde til gengæld heller ikke virke for article_id er erklæret som en string parameter i funktionen.

Med venlig hilsen
Jonas Midstrup
www.midstrup.dk



t