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


XML och C#Windows forms

Postades av 2005-01-14 13:52:07 - Viktor Ekblom, i forum c# (c-sharp), Tråden har 8 Kommentarer och lästs av 885 personer

Tja!

Har ett litet problem här.
Håller på med ett program som håller reda på bl.a filmer man har och tänkte använda XML för att lagra informationen i. Nu är det så att mitt program vägrar "fylla på" i xml filen och om jag kör metoden flera gånger så får jag fortfarande bara en film nod.
Skulle vilja ha hjälp med hur man får den att "fylla på".

Hittade en tutorial på nätet där jag tagit koden ifrån å försökt förstå den, förstår det mesta men hur man gör så han fyller på är för mig ett stort frågetecken.

Här är koden:

	
			string FILE_NAME = "test.xml";
			XmlTextWriter xmlWriter = null;
			xmlWriter = new XmlTextWriter (FILE_NAME, null);

				xmlWriter.Formatting = Formatting.Indented;
				xmlWriter.Indentation= 6;
				xmlWriter.Namespaces = false;
				
				xmlWriter.WriteStartDocument();

				xmlWriter.WriteStartElement("", "db", "");
				xmlWriter.WriteStartElement("", "film", "");

				xmlWriter.WriteStartElement("", "Titel", "");
				xmlWriter.WriteString("The Rock");
				xmlWriter.WriteEndElement();

				xmlWriter.WriteEndElement();
				xmlWriter.WriteEndElement();

				xmlWriter.Flush();
				xmlWriter.Close();


Tack på förhand!

/Viktor


Svara

Sv: XML och C#Windows forms

Postades av 2005-01-14 14:10:40 - Simon Dahlbacka

Du måste göra en loop där du skriver ut ungefär detta för varje film du vill lägga till

	xmlWriter.WriteStartElement("", "film", "");

	xmlWriter.WriteStartElement("", "Titel", "");
	xmlWriter.WriteString("The Rock"); //kan lämpligen bytas..
	xmlWriter.WriteEndElement(); // slut på titel

	xmlWriter.WriteEndElement(); // slut på film


Svara

Sv: XML och C#Windows forms

Postades av 2005-01-14 14:19:27 - Viktor Ekblom

Så om jag redan har ett gäng filmer i filen så måste jag läsa in alla en array och sen skriva ut alla igen plus den nya?

Tycker det borde finnas något lättare sätt... :)


Svara

Sv:XML och C#Windows forms

Postades av 2005-01-14 14:22:40 - Simon Dahlbacka

inte om du använder SAX, däremot går det ifall du använder DOM
(är dock inte så hemma i .net frameworket så du får lov och söka lite). Dock så vid användning av DOM så laddas hela trädet i minnet, så för extremt stora xml filer är det kanske inte att rekommendera, å andra sidan i så fall är XML kanske inte det bästa alternativet heller..


Svara

Sv: XML och C#Windows forms

Postades av 2005-01-15 17:08:14 - Benni Svensson

Har svårt att förstå varför databas inte skulle vara ett allternativ.


Svara

Sv:XML och C#Windows forms

Postades av 2005-01-15 20:36:42 - Morgan Persson

Att använda en databas i detta fal kanske är lite overkill eftersom jag tror att det är en och endast en användare av programmet. Jag hade satsat på ett typat dataset.


Svara

Sv: XML och C#Windows forms

Postades av 2005-01-16 20:13:55 - Andreas Håkansson

Viktor,

Nu ska vi titta på en lite mer spännande lösning för hur man skulle kunna gå tillväga för att arbeta med, samt spara ner filmerna. Eftersom vi arbetar med en utvecklingsplatform som är <b>objektorienterad</b> så är det lämpligt, och att föredra att kunna hålla sig i den.

Det vi skall använda oss av är något som kallas för XML Serializering, vilket innebär att man omvandlar ett <b>objekt</b> till xml (och tillbaka om man vill/behöver). Jag vill påpeka att detta <b>exempel</b> innehåller en hel del <b>slarvig</b> kod så som direkt åtkomst på fält etc, men jag valde att använda det för att kunna hålla exemplet kort, lätt läst, men ändå så att det förmedlar vad som är möjligt.

Vi börjar med att skapa en <b>klass</b> som representerar en film, denna skulle kunna (mycket enkelt) se ut enligt följande.

public class Film
{
	public string artal;
	public string titel;

	// Måste finnas en 'default' kontruktor
	public Film()
	{
	}

	public Film(string artal, string titel)
	{
		this.artal = artal;
		this.titel = titel;
	}
}


Som du set är fälten <b>artal</b> och <b>titel</b> satt till publika, detta använde jag här för att xml serializatorn kan läsa av dem direkt då, vi behöver inte instuera den om mer komplexa relationer. Klassen i sig är inte på något sätt komplicerad, den innehåller en kontruktor som tillåter oss att sätta årtal och titel direkt vid skapandet - så att det blir enklare att arbeta med.

Nästa sak vi måste göra är att skapa en klass som representerar listan över filmer som vi har tillgängliga. Detta gör vi gemom att skapa en klass med namnet <b>FilmLista</b>. Vi bygger den i två steg så att den inte blir för komplicerad vid första anblick.

public class FilmLista
{
	[XmlArray("Filmer"), XmlArrayItem("Film", typeof(Film))]
	public ArrayList filmer;

	public FilmLista()
	{
		this.filmer = new ArrayList();
	}
}


Klassen innehåller en lista (av typen <b>ArrayList</b>) över filmer som vi har. Det som är lite speciellt här är att fältet har tilldelats två <b>attribut</b> vid namnen <b>XmlArray</b>,som säger att fältet skall behandlas som en array och att den skall representeras av taggen <b>Filmer</b> i vår xml - samt <b>XmlArrayItem</b> som säger att vår array innehåller objekt av typen <b>Film</b> samt att de ska presenteras med namnet <b>Film</b> i xml-filen.

Ok, så nu kan vi skapa en filmlista och lägga till filmer med den med följande kod.

FilmLista lista = new FilmLista();

lista.filmer.Add(new Film("1999", "Min film"));
lista.filmer.Add(new Film("2000", "The Roclk"));


Nästa steg är att kunna <b>spara</b> listan till en xml fil. För att göra detta lägger vi till en <b>metod</b> med namnet <b>Spara</b> i klassen <b>FilmLista</b>. Denna metod kommer att ha till uppgift att genomföra själva <b>xml serilizeringen</b> (konvertering från Objekt -> XML), samt att spara ner det till en fil, vars namn vi skickar med in.

public class FilmLista
{
	[XmlArray("Filmer"), XmlArrayItem("Film", typeof(Film))]
	public ArrayList filmer;

	public FilmLista()
	{
		this.filmer = new ArrayList();
	}

	public bool Spara(string filNamn)
	{
		FileStream xmlFil = new FileStream(filNamn, FileMode.OpenOrCreate);

		try
		{
			XmlSerializer serializer = 
				new XmlSerializer(typeof(FilmLista));
			serializer.Serialize(xmlFil, this);
		}
		catch(Exception ex)
		{
			return false;
		}
		finally
		{
			xmlFil.Close();
		}

		return true;
	}
}


Väldigt enkel och lätt läst kod här. Vid det här laget kan det vara lämpligt att läsa på lite i dokumentationen om vad det är som sker här, men det borde inte vara så svårt att få en överblick. När vi hart denna metoden så använder vi den på följande sätt.

FilmLista lista = new FilmLista();

lista.filmer.Add(new Film("1999", "Min film"));
lista.filmer.Add(new Film("2000", "The Roclk"));

if( lista.Spara("FilmLista.xml") )
	Console.WriteLine("Sparade filmerna");
else
	Console.WriteLine("Kunde inte spara filmerna!");


Resultatet blir då att filmerna sparas ner i en fil med namnet <b>FilmLista.xml</b> som ser ut som följande om du öppnar den.

<?xml version="1.0"?>
<FilmLista xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Filmer>
    <Film>
      <artal>1999</artal>
      <titel>Min film</titel>
    </Film>
    <Film>
      <artal>2000</artal>
      <titel>The Roclk</titel>
    </Film>
  </Filmer>
</FilmLista>


Volia! Enkalt och snyggt va? Mycket trevligare än att "manuellt" skapa xml-filen med kod. Det är väldigt enkelt när man bygger ut informationen i t.ex Film klassen. Lägg till den nya informationen så sparas den automatiskt när du sparar.

Det finns attribut som man kan använda för att säta till att saker inte skall tas med vid serializering, samt att det finns en metod på klassen <b>XmlSerializer</b> som heter <b>Deserialize</b> som gör det omvända (XML -> Objekt) som skulle kunna användas för en funktion för att ladda in filmlistan igen.

Hoppas det gav några idéer på hur du kan gå vidare!


Svara

Sv:XML och C#Windows forms

Postades av 2005-01-16 22:21:22 - Viktor Ekblom

Man tackar och bugar!

Ska definitivt testa detta på en gång!

/Viktor


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

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 569 165
27 952
271 704
1 169
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