![]() |
XML mit C#
Hallo, ich muss ein XML Dokument mit C# zusammenbauen. Dieses Dokument wird aber nicht als Datei gespeichert, sondern dann als Text verschickt.
Ich habe mich hier und im Internet schon umgesehen, aber ich weiß nicht, wie ich:
Beispiel:
XML-Code:
PS: Gibt es irgendwo ein gutes Tutorial zu diesem Thema (XML und C#)? Da bin ich mit Mr. Google nämlich auch nicht richtig fündig geworden. :(
<xml>
<projekt> <interner_name>SuperduperSoftware</interner_name> <beschreibung>geiles Teil</beschreibung> <status>fast fertig</status> </projekt> </xml> |
Re: XML mit C#
Hi, auf Geloleocomputing steht dazu folgendes:
Zitat:
|
Re: XML mit C#
Einfach mal so...
Code:
...:cat:...
using System.Xml;
... XmlDocument xml = new XmlDocument(); XmlNode root = xml.AppendChild(xml.CreateNode(XmlNodeType.Element, "xml", "")); XmlNode project = root.AppendChild(xml.CreateNode(XmlNodeType.Element, "project", "")); project.AppendChild(xml.CreateNode(XmlNodeType.Element, "interner_name", "")).InnerText = "SuperduperSoftware"; project.AppendChild(xml.CreateNode(XmlNodeType.Element, "beschreibung", "")).InnerText = "geiles Teil"; project.AppendChild(xml.CreateNode(XmlNodeType.Element, "status", "")).InnerText = "fast fertig"; textBox1.Text = xml.InnerXml; |
Re: XML mit C#
@matze: Jupp. Mit dem Namespace habe ich ja schon rumprobiert.
@leidensgenosse: Danke. Sieht gut aus. ;) So, da ich das Thema ja etwas allgemein gehalten habe, kann ich hier gleich weiter machen. ;) Jetzt bräuchte ich den umgekehrten Weg. Also das XML Dokument (Beispiel siehe oben)= liegt mir als String vor. Wie komme ich jetzt wieder an die darin enthaltenen Informationen dran. Ich habe da was von XPath gehört. Man gibt also den Pfad zu dem Knoten irgendwie an und kann dann direkt die Informationen auslesen. Habe ich das richtig verstanden? Und wie würde das jetzt konkret aussehen? |
Re: XML mit C#
Ich habe mal versucht mich vorsichtig ranzutasten:
Code:
Aber ich bekomme jedesmal eine Exception, obwohl ich dachte, dass ich es ganuso mache wie in dem Beispiel aus der Hilfe. :gruebel:
try
{ XmlTextReader xmltr = new XmlTextReader(s); xmltr.Read(); lblCurProject.Text = xmltr.Name; xmltr.Close(); } catch (System.Xml.XmlException xmle) { MessageBox.Show(xmle.Message); } Und zwar fliegt es mir hier: XmlTextReader xmltr = new XmlTextReader(s); schon um die Ohren. In s steht aber genau das drinne, was ich weiteroben zusammengebastelt habe: Zitat:
|
Re: XML mit C#
Also den XmlReader mag ich nicht und nutz ich nicht.
Ich mach das immer so:
Code:
XMlDocument xmlDoc=new XmlDocument();
XmlDocument.LoadXML(xmlstring); XmlNode node = new xmlNode(); node=xmlDoc.SelectSingleNode("xml/project/internername"); // evtl. statt Slashes Backslashes, weiß es grad nicht, evtl. muss an den Anfang auch ein Slash MessageBox.Show(node.Text); |
Re: XML mit C#
Hm, das sieht doch schon mal schön aus. Nur sagt er mir hier:
Code:
XmlNode node = new XmlNode();
Zitat:
|
Re: XML mit C#
ups... XmlNode node
reicht aus, es muss nicht extrta eine Objektinstanzt erzeugt werden, is mir grad eingefallen... |
Re: XML mit C#
Also bei mir gibt's kein XmlNode.Text... :gruebel:
Edit: .NET Framework 2 |
Re: XML mit C#
Stimmt.. hab das grad aus'm Kopf geschrieben... hab nachgeguckt, heißt
node.InnerText |
Re: XML mit C#
Ups. Da kommt wieder meine C# Unerfahrenheit zum Vorschein. :oops:
Jetzt bekomme ich zwar den Namen: lblCurProject.Text = node.Name; aber mit node.Value keinen Wert. |
Re: XML mit C#
Das ist nicht weiter verwunderlich. In der Hilfe steht zu XmlNode.Value:
XmlNode.Value Eigenschaftenwert Der zurückgegebene Wert hängt vom NodeType des Knotens ab: Attribute: Der Wert des Attributs. CDATASection: Der Inhalt des CDATA-Abschnitts. Comment: Der Inhalt des Kommentars. Document: NULL (Nothing in Visual Basic). DocumentFragment: NULL (Nothing in Visual Basic). DocumentType: NULL (Nothing in Visual Basic). Element: NULL (Nothing in Visual Basic). Auf den Wert des Elementknotens kann über die XmlElement.InnerText-Eigenschaft oder die XmlElement.InnerXml-Eigenschaft zugegriffen werden. Entity: NULL (Nothing in Visual Basic). EntityReference: NULL (Nothing in Visual Basic). Notation: NULL (Nothing in Visual Basic). ProcessingInstruction: Der gesamte Inhalt mit Ausnahme des Zieles. Text: Der Inhalt des Textknotens. SignificantWhitespace: Die Leerraumzeichen. Leerraum kann aus einem oder mehreren Leerzeichen, Wagenrückläufen, Zeilenvorschüben und Tabstopps bestehen. Whitespace: Die Leerraumzeichen. Leerraum kann aus einem oder mehreren Leerzeichen, Wagenrückläufen, Zeilenvorschüben und Tabstopps bestehen. XmlDeclaration: Der Inhalt der Deklaration (d. h. alle Zeichen zwischen <?xml und ?>). PS: Will heißen
Code:
XMlDocument xmlDoc = new XmlDocument();
XmlDocument.LoadXML(xmlstring); XmlNode node = xmlDoc.SelectSingleNode("/xml/project/internername"); MessageBox.Show(node.InnerText); |
Re: XML mit C#
Hallo Luckie,
als Lektüre zu XML kann ich dir das Buch "XML essential" von AddisonWesley empfehlen... (ISBN- 3-8273-1769-x, absolut genial, DAS XML-Buch in meinen Augen). Willst Du über DOM oder SAX gehen ??!?! In .net gibt es (meines Wissens) kein SAX um XML-Docs schnell und effektiv zu lesen, aber nicht wirklich schlimm... probiere mal folgendes aus:
Delphi-Quellcode:
XMLReader xreader = XmlReader.Create("dp.xml");
while (xreader.ReadToFollowing("Knoten") { Console.WriteLine(xreader.ReadString()); } xreader.Close(); :-) thomas |
Re: XML mit C#
Wenn ich im Konstruktor auch einen String übergeben kann, dann wäre das eine alternative. Aber so klappt es auch schon prima.
|
Re: XML mit C#
Zitat:
|
Re: XML mit C#
Eine letzte Frage zum Thema, dann haben wir es geschafft. Wie kann ich Attribute zu einem Element hinzufügen und wieder auslesen?
XML-Code:
Irgendwie so habe ich es versucht.
XmlDocument xml = new XmlDocument();
XmlNode msg = xml.AppendChild(xml.CreateNode(XmlNodeType.Element, "message", "")); XmlAttribute attr = Und wie kann ich kontrollieren, ob es geklappt hat? Stehen die Attribute dann auch in xml.InnerText:
Code:
Console.WriteLine(xml.InnerXml);
|
Re: XML mit C#
Neue Erkennsnis:
Code:
Ist das so richtig? Denn mit...
XmlDocument xml = new XmlDocument();
XmlNode msg = xml.AppendChild(xml.CreateNode(XmlNodeType.Element, "message", "")); XmlAttribute attr = xml.CreateAttribute("from"); attr.InnerText = xmpp1.User;
Code:
...wird es mir nicht mit ausgegeben.
Console.WriteLine(xml.InnerXml);
|
Re: XML mit C#
Du musst das Attribute auch noch der Node hinzufügen :zwinker:
Code:
...:cat:...
msg.Attributes.Append(attr);
|
Re: XML mit C#
Klingt sinnvoll. Das so was in der Art da irgendwie fehlt, hatte ich mir auf der Toilette auch gerade überlegt. ;)
|
Re: XML mit C#
Deine besten Ideen hast du auf diesem Örtchen, wie? :stupid: Es ist nicht das erste Mal, dass du die Toilette so speziell erwähnst. :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz