Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-11-13 11:06:59 - Johan Dahlberg, i forum c# (c-sharp), Tråden har 17 Kommentarer och lästs av 1151 personer

Jag håller på och gör ett skolprojekt där vi gör ett DVD-register och jag behöver kunna ta bort en specifik DVD.

Så här ser strukturen ut i XML-filen:

<?xml version="1.0" encoding="iso-8859-1"?>
<Registry>
<dvd id="0">
<name>Another Cinderella Story</name>
<company>Warner</company>
<year>2008</year>
</dvd>
</Registry>

Jag har ID't som ska tas bort lagrad i en integer kallad DVDid. Det jag alltså vill göra är att jag vill ta bort DVD elementet med det valda IDet. hur gör jag? Jag har skrivit så här, men är inte klar.

/***** Börja ta bort *****/

// Initiera en ny instans av XmlDocument-klassen
XmlDocument xDoc = new XmlDocument();

// Laddar in XML-dokumentet (databasen)
xDoc.Load("Registry.xml");

// Välj noden som ska användas
XmlNode localnode = xDoc.SelectSingleNode("/Registry/dvd");

// Ta bort XML-noden
xDoc.DocumentElement.RemoveChild(xDoc.DocumentElement.ChildNodes[localnode]);

// Skapa filströmmen för att spara
FileStream Writer = new FileStream("Registry.xml", FileMode.Truncate, FileAccess.Write, FileShare.ReadWrite);

// Spara XML-dokumentet
xDoc.Save(Writer);

// Stäng Writer
Writer.Close();

Är det någon som vet hur man lättast gör det här?


Svara

Sv: Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-11-13 12:34:32 - Samuel Adolfsson

Det här borde fungera:

XmlDocument d = new XmlDocument();
d.Load(@"Registry.xml");
XmlNode t = d.SelectSingleNode("/Registry/dvd[@id='1']");
t.ParentNode.RemoveChild(t);
d.Save(@"Registry.xml");


Svara

Sv:Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-11-13 14:47:07 - Johan Dahlberg

Tack för hjälpen men jag skulle behöva hämta värdet till id='1'
ID't är lagrat i en variabel kallad DVDid, så behöver få värdet därifrån så att användaren kan välja vilken som ska tas bort


Svara

Sv: Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-11-13 20:47:56 - Samuel Adolfsson

För att få fram id på en specifik film kan du t.ex först göra en sökning på namn:

XmlNode n = d.SelectSingleNode("/Registry/dvd/name[. ='Another Cinderella Story']");

Om filmen hittas kan du få ut id t.ex så här:
XmlAttribute a = n.ParentNode.Attributes["id"];
string id = a.Value;

En annan variant är, om du har möjlighet, att använda LINQ to XML! Exempelvis som nedan:

Definiera en klass DVD, t.ex:
public class DVD
{
public int Id { get; set; }
public string Name { get; set; }
public string Company { get; set; }
public int Year { get; set; }
}

Sedan göra sökning på filmnamn, t.ex:

List<DVD> dvd = (from xml2 in XDocument.Load(@"registry.xml").Elements("Registry").Elements("dvd")
where xml2.Element("name").Value == "Another Cinderella Story"
select new DVD
{
Id = Convert.ToInt32(xml2.Attribute("id").Value),
Name = xml2.Element("name").Value,
Company = xml2.Element("company").Value,
Year = Convert.ToInt32(xml2.Element("year").Value)
}).ToList();

Om du får någon träff så får du id exempelvis via:

dvd[0].Id


Svara

Sv:Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-11-13 21:56:30 - Johan Dahlberg

Jag är inte säker på att du förstod vad jag menade. Jag har låtit användaren välja vilken film som ska tas bort genom att de skriver in ID't, genom

DVDid = int.Parse(console.ReadLine());

Den variablen ska jag sedan använda för att välja ut vilken som ska raderas. Förstår du hur jag menar?


Svara

Sv: Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-11-14 09:41:32 - Samuel Adolfsson

DVDid = int.Parse(console.ReadLine());

...
XmlNode t = d.SelectSingleNode(String.Format("/Registry/dvd[@id='{0}']", DVDid));
...

Det löser nog ditt problem.


Svara

Sv:Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-11-14 10:39:01 - Johan Dahlberg

Har följande kod bortsett från DVDid som hämtas tidigare:

// Initiera en ny instans av XmlDocument-klassen
XmlDocument xDoc = new XmlDocument();

// Laddar in XML-dokumentet (databasen)
xDoc.Load(@"Registry.xml");

// Välj noden som ska användas
XmlNode localnode = xDoc.SelectSingleNode(String.Format("/Registry/dvd[@id='{0}']", DVDid));

// Ta bort XML-noden
xDoc.ParentNode.RemoveChild(localnode);
// Har testat med localnode.ParentNode.RemoveChild(localnode); också

// Spara XML-dokumentet
xDoc.Save(@"Registry.xml");

Console.WriteLine("Du lyckades!!!");
Console.ReadKey();

Jag får följande felmeddelande när den kommer fram till // Ta bort XML-noden

NullReferenceException
Objektreferensen har inte angetts till en instans av ett objekt.

Något jag missat?


Svara

Sv: Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-11-17 20:35:11 - Johan Dahlberg

Är det någon som vet vad som är fel?


Svara

Sv:Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-11-18 10:53:48 - Jan Bulér

I ditt falll bör det funka med:

xDoc.DocumentElement.RemoveChild(localnode);


Svara

Sv: Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-11-20 07:50:26 - Jan Bulér

Hur gick det, är problemet löst?


Svara

Sv:Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-11-20 09:02:19 - Johan Dahlberg

Den klagar fortfarande, klistrar in hela funktionen här så kan du se ifall det är något annat fel:

public void DeleteDisc()
{
// Deklarerar variabler
int DVDid, i, maxvarde;
bool trycatch;

trycatch = true;

// Frågar vilken DVD användaren vill ta bort
while (trycatch)
{
// Skriver ut Vilka filmer du har
Console.Write("ALTERNATIV:\n\n");

// Startar loopen för att skriva ut DVDernas Namn
for (i = 0; i < Registry.Count; i++)
{
SRegistry register = (SRegistry)Registry[i];

// Skriver ut resultatet
Console.Write("{0}. Namn:\t {1}\n", i, register.Name);
}

Console.Write("\n\nVilken DVD vill du ta bort?\n(ange talet innan DVDns namn)");
Console.Write("\n\nVal: ");

maxvarde = i - 1;

try
{
// kollar ifall användaren angett ett godkänt ID
DVDid = int.Parse(Console.ReadLine());
Console.Clear();
trycatch = false;

}
catch(Exception)
{
// Annars så kommer ett felmeddelande, och användaren får en ny chans
Console.Clear();
Console.WriteLine("Du måste ange ett värde mellan 0 och {0}", i);
Console.WriteLine("(Tryck på någon tangent för att fortsätta");
Console.ReadKey();
Console.Clear();
trycatch = true;
}
}

/***** Börja ta bort *****/

// Initiera en ny instans av XmlDocument-klassen
XmlDocument xDoc = new XmlDocument();

// Laddar in XML-dokumentet (databasen)
xDoc.Load(@"Registry.xml");

// Välj noden som ska användas
XmlNode localnode = xDoc.SelectSingleNode(String.Format("/Registry/dvd[@id='{0}']", 12));

// Ta bort XML-noden
//xDoc.ParentNode.RemoveChild(localnode);
xDoc.DocumentElement.RemoveChild(localnode);

// Spara XML-dokumentet
xDoc.Save(@"Registry.xml");

Console.WriteLine("Du lyckades!!!");
Console.ReadKey();
}


Svara

Sv: Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-11-20 10:45:03 - Johan Dahlberg

Får det här felmeddelandet:

Error 1 Use of unassigned local variable 'DVDid' d:\mina dokument\Visual Studio 2008\Projects\Projekt B\Projekt B\Program.cs 214 97 Projekt B


Svara

Sv:Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-11-21 10:29:37 - Jan Bulér

Felmeddelandet tyder på att du har använt DVDid-variabeln, på angiven rad i koden, utan att du har tilldelat den något värde.



Jag körde ett litet test och så här fick jag det att funka.

<code>
public void DeleteDisc()
{

const string EXIT = "E";

// Initiera en ny instans av XmlDocument-klassen
XmlDocument xDoc = new XmlDocument();

// Laddar in XML-dokumentet (databasen)
xDoc.Load(@"Registry.xml");

// Frågar vilken DVD användaren vill ta bort
bool running = true;
while (running)
{
// Skriver ut Vilka filmer du har
Console.Write("ALTERNATIV:\n\n");

// Startar loopen för att skriva ut DVDernas Namn
foreach (XmlNode node in xDoc.DocumentElement)
{
//Console.Write("{0}. Namn:\t {1}\n", i, register.Name);
Console.WriteLine(String.Format("Id: {0}, {1}", node.Attributes["id"].Value ,node.InnerText));
}

Console.WriteLine("ange id-numret på någon DVD för att radera eller {0} för att avsluta", EXIT);

string inline = String.Empty;
inline = Console.ReadLine();
Console.Clear();

if (String.Compare(inline, EXIT, true) != 0)
{
int DVDid;
if (int.TryParse(inline, out DVDid))
{
Console.Clear();

/***** Börja ta bort *****/

// Välj noden som ska användas
XmlNode localnode = xDoc.SelectSingleNode(String.Format("/Registry/dvd[@id='{0}']", DVDid));

try
{
// Ta bort XML-noden
xDoc.DocumentElement.RemoveChild(localnode);

// Spara XML-dokumentet
xDoc.Save(@"Registry.xml");

Console.WriteLine(String.Format("Har raderat DVD med id {0}", DVDid));
}
catch
{
Console.WriteLine(String.Format("Kunde inte radera DVD med id {0}", DVDid));
}
}

else //Ogiltigt val
{
// Annars så kommer ett felmeddelande, och användaren får en ny chans
Console.Clear();
Console.WriteLine("Du måste ange id-numret på någon DVD.");
}

Console.WriteLine("press any key");
Console.ReadKey();
Console.Clear();
}
else //EXIT
{
running = false;
}

}
}
</code>


Svara

Sv: Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-12-02 08:53:51 - Johan Dahlberg

Jag får fortfarande följande felmeddelande:

Error 1 Use of unassigned local variable 'DVDid' d:\mina dokument\Visual Studio 2008\Projects\Projekt B\Projekt B\Program.cs 293 97 Projekt B


Svara

Sv:Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-12-02 11:32:43 - Jan Bulér

Det verkar ju som att du försöker läsa av DVDid någonstan i koden (Kolla i Program.cs rad 293, jag TROR det är det felmedelandet refererar till).

om du försöker

någonting = DVDid

så får du ett Error om du aldrig tilldelat DVDid något värde.

Se skillanden mellan

int DVDid;
något = DVDid

och

int DVDid
DVDid = ettVärde
något = DVDid.

Får du felmeddelandet när du kompilerar eller när du kör koden?


Svara

Sv: Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-12-04 08:38:19 - Johan Dahlberg

Jag får det när jag kör koden

Sen undrar jag en sak här:

Console.WriteLine(String.Format("{0}. {1}", node.Attributes["id"].Value, node.InnerText));

Hur gör jag för att skriva ut ett specifikt element istället för alla element?


Svara

Sv:Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-12-04 22:00:41 - Jan Bulér

Då måste du ju titta i koden ovanför där det slår stopp, du har alltså inte tilldelat något värde till DVDid när du kommer till det stälet där det går fel.


Angående att skriva ut ett specifikt element/node så kan du t ex göra så här

<code>
// Välj noden som ska användas
XmlNode localnode = xDoc.SelectSingleNode(String.Format("/Registry/dvd[@id='{0}']", DVDid));

try
{
// Ta bort XML-noden
xDoc.DocumentElement.RemoveChild(localnode);

// Spara XML-dokumentet
xDoc.Save(@"Registry.xml");

Console.WriteLine(String.Format("Har raderat DVD med id {0}", DVDid));

Console.WriteLine(String.Format("Filmen hette: {0}", localnode.SelectSingleNode("name").InnerText));
Console.WriteLine(String.Format("den var gjord av {0}", localnode.SelectSingleNode("company").InnerText));
Console.WriteLine(String.Format("år {0}", localnode.SelectSingleNode("year").InnerText));

}
catch
{
Console.WriteLine(String.Format("Kunde inte radera DVD med id {0}", DVDid));
}
</code>


Googla även lite på Xpath, sökfunktion för XML.

[Edit]
Här finns en liten artikel som t o m har en XML fil CD-info som exempel på hur man kan använda XPath i XML-dokument http://www.codeproject.com/KB/cpp/myXPath.aspx


Svara

Sv: Ta bort ett speciellt element i XML med hjälp av attribut

Postades av 2008-12-05 09:48:18 - Johan Dahlberg

Fick det att fungera nu, tack för all hjälp


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 699
27 958
271 741
802
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies