Seiten
Zuletzt im Ohr
Zuletzt im Sinn
Archiv
- August 2010 (6)
- Juni 2010 (11)
- Mai 2010 (4)
- März 2010 (6)
- Februar 2010 (3)
- Dezember 2009 (2)
- November 2009 (3)
- Oktober 2009 (17)
- September 2009 (7)
- August 2009 (7)
- Juli 2009 (3)
- Juni 2009 (2)
- Mai 2009 (4)
- April 2009 (1)
- März 2009 (3)
- Februar 2009 (11)
- Januar 2009 (14)
- Dezember 2008 (6)
- November 2008 (9)
- Oktober 2008 (6)
- September 2008 (3)
Tagcloud
Partner/Links
- C# Tipps und Tricks - C# Tipps und Tricks
- gb-pix.de - Gästebuchbilder, Jappy, MySpace…
- Kostenlose Browsergames - Kostenlose Browsergames
- MySpace Downloader - MySpace Loader – der kostenlose MySpace.com Downloader
- Servervoice Blog - Servervoice Blog
- Wordpress Theme
- Youtube Mediaplayer - Webmusix – der kostenlose Youtube Mediaplayer
Network
Klassen generieren mit der XSD.exe
Bis vor kurzer Zeit schrieb ich mir sämtlichen Code für den Zugriff auf XML Dateien mit Hilfe der vom .Net Framework bereitgestellten Klassen mühselig von Hand zusammen. Wie gesagt – bis vor kurzem.
Da ich zu Hause nur mit der kostenlosen Express Edition des Visual Studio arbeite lief mir die xsd.exe bisher nicht über den Weg. Dabei erspart sie einem bei dem Zugriff auf XML-Dateien eine Menge Arbeit. So lässt sich mittels dieser .exe im Handumdrehen eine Klasse aus einer beliebigen XML-Datei generieren, die den Zugriff auf eben diese um Welten erleichtert. Wie das funktioniert möchte ich euch im folgenden anhand des ARD Tagesschau Feeds zeigen. (Bilder zum Vergrößern einfach anklicken. )
1 – Feed speichern
Als erstes speichern wir den besagten Feed als XML Datei ab. Dazu öffnet ihr den Feed einfach in eurem Browser und klickt im Menü auf “Seite speichern unter”.
In manchen Browsern, wie zum Beispiel im Firefox, müsst ihr beim Speichern noch die Datei Endung auf .xml anpassen.
2a – Konsole öffnen (Visual Studio Express Edition)
Öffnet die Konsole
(Start >> Ausführen >> cmd)
und wechselt in den “bin”-Ordner
des Microsoft SDKs.
Normalerweise findet ihr
diesen an folgender Stelle:
“C:\Programme\Microsoft SDKs\Windows\{version}\bin”
2b – Konsole öffnen (Visual Studio Professional, Enterprise, etc. Edition)
Öffnet die Visual Studio Tools Konsole.
3 – XML-Datei –> XSD Schema –> Klasse
(Um elendig langen Pfadangaben aus dem Weg zu gehen habe ich die in Schritt 1 gespeicherte XML-Datei in einen hierfür angelegten Ordner “xml” auf Laufwerk C:\ abgelegt.)
Als nächstes generieren wir ein XSD Schema aus unserer XML-Datei. Hierfür geben wir folgenden Befehl in die Konsole ein.
xsd c:\xml\index.xml /outputdir:c:\xml
Um aus der soeben erstellen .xsd-Datei unsere gewünschte Klasse zu generieren ist nun nur noch folgender Aufruf nötig.
xsd c:\xml\index.xsd /outputdir:c:\xml /classes
Das war es eigentlich schon. Nun haben wir aus unserer XML-Datei ein XSD Schema und daraus eine Klasse für die Verwendung in C#.Net erstellt. Was genau man damit anstellen kann folgt im nächsten Schritt.
4 – Verwendung und Aufruf der generierten Klasse
Um euch zu demonstrieren, wie und an welcher Stelle man die generierte Klasse sinnvoll nutzen kann habe ich eine kleine Testapplikation erstellt.
Da wir uns in diesem Tutorial als Test-XML an dem RSS Feed der Tagesschau vergriffen haben, liegt es nahe einen kleinen Nachrichtenleser zu basteln.
Legt also ein neues Windows Forms Projekt an und stattet eurer Main Form mit den folgenden vier Controls aus:
- ListBox
- Label
- RichTextBox
- Linklabel
Im nächsten Schritt binden wir die generierte Klasse ein. Hierzu reicht ein Rechtsklick im Projektexplorer auf unserer Projekt und dann ein Linksklick auf “vorhandenes Element hinzufügen”. Nun nur noch schnell die erstelle Klasse auswählen und mit Ok bestätigen.
Jetzt binden wir den Namespace System.Net ein, definieren 2 Variablen, einen String namens Link, sowie ein rss object unserer generierten Klasse und legen das Load Event unseres Main Forms, das Click Event der ListBox und das LinkClicked Event des LinkLabels an. Der Code eures Main Forms sollte nun wie folgt aussehen.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
namespace XsdTutorial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private rss rssbase;
private string link;
private void Form1_Load(object sender, EventArgs e)
{
}
private void listBoxPosts_Click(object sender, EventArgs e)
{
}
private void linkLabelPost_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
}
}
}
Im nächsten Schritt befüllen wir die Events. Die Erklärungen hierzu entnehmt ihr bitte den Kommentaren im Code. Sollten sich Fragen auftun, dann schreibt bitte einen Kommentar!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
namespace XsdTutorial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private rss rssbase;
private string link;
private void Form1_Load(object sender, EventArgs e)
{
//Erstelle HttpWebRequest für den Taggeschau Feed
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.tagesschau.de/xml/tagesschau-meldungen/");
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
//Lege Kodierung fest, damit Sonderzeichen richtig angezeigt werden.
//Der passende Encoding String ist dem Header des Feeds zu entnehmen.
//(Im Browser: Rechtsklick >> Quelltext anzeigen)
Encoding encode = System.Text.Encoding.GetEncoding("ISO-8859-1");
//Öffne einen Streamreader mit dem Response Stream, der den Feed enthält
//und lege Kodierung fest.
System.IO.StreamReader str = new System.IO.StreamReader(res.GetResponseStream(), encode);
//Initialisiere einen XMLSerializer mit dem Schema (typeof(rss)) unseres Feeds.
System.Xml.Serialization.XmlSerializer xSerializer = new System.Xml.Serialization.XmlSerializer(typeof(rss));
//Deserialisiere unsere Feed nach dem Schema.
rssbase = (rss)xSerializer.Deserialize(str);
//Gibt an ob es sich um das erste Objekt in der folgenden Schleife handelt.
bool first = true;
//Durchlaufe alle Items. Jedes Item enthält die Elemente
//(Titel, Beschreibung, etc.) einer Nachricht des Feeds
foreach (rssChannelItem item in rssbase.channel[0].item)
{
if (first)
{
//Weise die Daten des ersten Items unseren
//Controls zu.
first = false;
labelTitel.Text = item.title;
richTextBoxMessage.Text = item.description;
link = item.link;
}
//Füge der ListBox einen Eintrag mit dem Titel
//der aktuellen Nachricht hinzu.
listBoxPosts.Items.Add(item.title);
}
str.Close();
}
private void listBoxPosts_Click(object sender, EventArgs e)
{
//Durchlaufe alle Items/Nachrichten des Feeds
foreach (rssChannelItem item in rssbase.channel[0].item)
{
if (item.title == listBoxPosts.SelectedItem.ToString())
{
//Entspricht die aktuelle Nachricht der in der Listbox
//angeklickten, so weise den Controls die entsprechenden
//Werte zu.
labelTitel.Text = item.title;
richTextBoxMessage.Text = item.description;
link = item.link;
}
}
}
private void linkLabelPost_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
//Rufe den angeklickten Link im Standard Browser auf
System.Diagnostics.Process.Start(link);
}
}
}
An dieser Stelle sind wir eigentlich schon fertig. Wenn nichts schief gelaufen ist, dann sollte sich euch nach einem Druck auf die F5-Taste ein ähnlicher Anblick, wie auf dem Bild, bieten.
Durch klicken auf die Überschriften in der ListBox könnt ihr euch eine Vorschau der jeweiligen Nachricht anzeigen lassen. Mit einem Klick auf das Linklabel – ich habe ihm den Text “weiterlesen…” gegeben – gelangt ihr zur Originalversion der Nachricht.
Soweit alles klar? Kamt ihr zurecht? Hinterlasst mir einen Kommentar!
Liebe Grüße,
Raffi
p.s.: Leider weist die xsd.exe einen kleinen Bug auf, was verschachtelte Elemente beziehungsweise JaggedArrays angeht. Solltet ihr bei euren Versuchen darüber stolpern, schaut die Tage noch mal rein. Ein kleines Workaround diesbezüglich wird folgen!
Ähnliche Artikel:
Hallo!

Kategorien
- Der tägliche Senf… (99)
- Informatik (96)
- C# & .net Framework (18)
- Cheat Sheets (4)
- HTML, PHP, etc. (6)
- Neuigkeiten (33)
- Software-Projekte (40)
- Tipps & Tricks (39)
- Web-Projekte (1)
- Musik (11)
- Downloads (4)
- Hörbar – Raffis Musiktipp (4)
- Videoclips (9)
- Schule (5)
Kalendar
| M | D | M | D | F | S | S |
|---|---|---|---|---|---|---|
| « Sep | Nov » | |||||
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
Counter
| Besucherstatistik | |
| Besucher gesamt: | 155.514 |
| Besucher heute: | 346 |
| Besucher gestern: | 392 |
| Max. Besucher pro Tag: | 677 |
| gerade online: | 4 |
| max. online: | 89 |
| Seitenaufrufe gesamt: | 431.550 |
| Seitenaufrufe diese Seite: | 739 |
| Counterstart: | 13.10.2008 |
Meta
Am meisten kommentiert
Neue Artikel
- Soundcloud Downloader
- Große Dateien schnellstmöglich verschicken
- Facebook- & Twitterbutton in Wordpress
- 5x (Audio-)visuelles für die Mittagspause
- C# – Facebook like MessageBox
- Update: Webmusix 1.4.2
- C# – Webcams benutzen
- Mp3’s schneiden, kürzen, ein- und ausblenden
- Netzfundstück: Amsterdam Acoustics
- Pixlr – Online Bilder bearbeiten
Neue Kommentare
- Frankonia: Sehr nützliches Tool, danke!
- Raffi: Dann werd ich mir mal das 4.0er Framework draufschmeißen und den Debugger anhauen
- Pari: Moin:) Unter WinXP SP3 mit installiertem .NET 2.0, 3.0 und 3.5 funzt es und unter Win7 x64 ebenso. Nur auf dem...
- Raffi: Hallo Pari, der Fehler ist mir noch nicht über den Weg gelaufen. Hast du eine Möglichkeit das Programm auf...
- Pari: ich krieg beim Versuch die Installation folgende Meldung: .Net Framework Initialization Error: Unable to find a...
net-blog.net © 2008-2010




0 Benutzer kommentierten "Automatisch eine Klasse für den Zugriff auf eine XML-Datei erstellen"