verwendetes Datenbanksystem: <XML>
Hallo,
ich habe folgende XML:
<?xml version="1.0" encoding="utf-8"?>
<RESULT imgURL="www.diedomain.de/images/request_12345.jpg">
<ITEM name="test AG" status="nicht betroffen" />
<ITEM name="test3 GmbH" status="betroffen" />
<ITEM name="versuchs GmbH" status="nicht betroffen" />
<ITEM name="bergwerk GmbH" status="betroffen" />
</RESULT>
Wie kann ich die XML am einfachsten in eine List <element> parsen?
struct element{
string name;
string status;
}
Wäre nett wenn mir jemand helfen könnte
Unsere Website
iPhone Programmierung | Android Programmierung
Hallo,
es gibt hier verschiedene Möglichkeiten. Eine davon ist Linq to XML.
Eine weitere Möglichkeit wäre, die Struktur Deiner XML-Datei in einer Klasse abzubilden und anschließend die Daten aus der Datei mit dem XmlSerializer in die Klasse einzulesen.
Lg
LINQ will ich absichtl. nicht nutzen 😃
Wegen dem serializer, wie kann man hier tun, dass er properties uebernimmt..
Unsere Website
iPhone Programmierung | Android Programmierung
Indem du XmlAttribute oder XmlElement Attribute auf deine Properties setzt.
Lg XXX
In Deinem Beispiel könnten die Klassen wie folgt aussehen:
using System;
using System.Xml.Serialization;
[Serializable()]
[XmlType(AnonymousType = true)]
[XmlRoot(ElementName = "RESULT", Namespace = "", IsNullable = false)]
public class Result
{
[XmlAttribute(AttributeName = "imgURL")]
public string imgURL { get; set; }
[XmlElement("ITEM")]
public Item[] Items { get; set; }
}
[Serializable()]
public class Item
{
[XmlAttribute(AttributeName = "name")]
public string Name { get; set; }
[XmlAttribute(AttributeName = "status")]
public string Status { get; set; }
}
Habe den konstruktiven Vorschlag von dN!3L aufgenommen und umgesetzt.
> ](http://msdn.microsoft.com/de-de/library/bb384054.aspx) sind dir bekannt?){gray}
Hey dN!3L,
ja selbstverständlich sind mir diese bekannt. Da ich diese beiden Klassen aber automatisch aus der Xml-Datei über ein Tool erzeugt habe, wollte ich mir nicht die Mühe machen, alles noch mal komplett zu überarbeiten.
Du hast aber schon recht. Gerade zum Veröffentlichen wäre ein kurzer Codeabschnitt schon sinnvoller gewesen 8)
Da ich diese beiden Klassen aber automatisch aus der Xml-Datei über ein Tool erzeugt habe[...]
Interessant... was ist das für ein Tool?
Den Status kann man übrigens auch als Enum parsen lassen:
[XmlRoot(ElementName = "RESULT")]
public class Result
{
[XmlElement("ITEM")]
public Item[] Items { get; set; }
[XmlAttribute("imgURL")]
public string ImagegUrl { get; set; }
}
[DebuggerDisplay("Name: {Name}, Status: {Status}")]
public class Item
{
[XmlAttribute("name")]
public string Name { get; set; }
[XmlAttribute("status")]
public Status Status { get; set; }
}
public enum Status
{
[XmlEnum("betroffen")]
Betroffen,
[XmlEnum("nicht betroffen")]
NichtBetroffen
}
...
string xml =
@"<?xml version=""1.0"" encoding=""utf-8""?>
<RESULT imgURL=""www.diedomain.de/images/request_12345.jpg"">
<ITEM name=""test AG"" status=""nicht betroffen"" />
<ITEM name=""test3 GmbH"" status=""betroffen"" />
<ITEM name=""versuchs GmbH"" status=""nicht betroffen"" />
<ITEM name=""bergwerk GmbH"" status=""betroffen"" />
</RESULT>";
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Result));
using (StringReader stringReader = new StringReader(xml))
{
Result result = (Result)xmlSerializer.Deserialize(stringReader);
}
Das ist mir auch schon negativ beim XSD-Tool aufgefallen, daß der keine automatischen Properties erzeugt (wahrscheinlich noch auf .NET 1.x basierend)...
Wie gesagt, es ging ja nur darum, schnell eine Klasse zu erzeugen, um Ploetzi ein kleines Beispiel zu geben.
Ich bin der Meinung, dass man Klassen, die mittels XSD erzeugt wurden, auf jeden Fall noch mal manuell überarbeiten sollte. Aber als Grundgerüst können solche automatisch erzeugten Klassen schon hilfreich sein.
Hallo,
LINQ will ich absichtl. nicht nutzen 😃
Wieso? "will" hört sich nach freiwillig an, sprich keine technischen Hintergründe. Linq2XML ist eine der allereinfachsten Möglichkeiten XML auszulesen und die ganzen Klassen die du hier beim XmlSerializer brauchst, brauchst man bei Linq nicht.
Baka wa shinanakya naoranai.
Mein XING Profil.