Frage

Ich möchte meine UI gegen eine Sammlung von XElements und ihre Eigenschaften auf einer Webseite binden. Hypothetisch könnte dies für jedes Objekt sein, das eine XML-Struktur darstellt. Ich hoffe, dass es ein besserer Weg, dies zu tun sein.

Soll ich eine XPath-Abfrage verwenden, um die Elemente der Kollektion, und die Attributwerte von jedem (in diesem Fall) XElement? Gibt es eine Art von Objekt, das ausgelegt ist, die Datenbindung gegen XML zu erleichtern?

<% foreach(var x in element.Descendants()) 
    {%>
<%= DateTime.Parse(x.Attribute["Time"]).ToShortDate() %>
<% } %>
<%-- excuse me, I just vomited a little in my mouth --%>
War es hilfreich?

Lösung

Ich verwende normalerweise eine „Platzhalter“ Klasse mit [XmlRoot], [XmlElement], [XmlAttribute] und ich habe das xml an einen Deserializer geleitet, die mir ein Objekt vom Typ des Platzhalter gibt. Sobald dies geschehen ist, zu tun, das einzige, was noch einige grundlegende Datenbindung zu einem stark typisierte Objekt.

Hier ist ein Beispiel-Klasse, die "XML-Enabled" ist:

[XmlRoot(ElementName = "Car", IsNullable = false, Namespace="")]
public class Car
{
    [XmlAttribute(AttributeName = "Model")]
    public string Model { get; set; }
    [XmlAttribute(AttributeName = "Make")]
    public string Make { get; set ;}
}

Und hier ist, wie es aus einer Datei richtig deserialisieren:

public Car ReadXml(string fileLocation)
{
    XmlSerializer carXml = new XmlSerializer(typeof(Car));

    FileStream fs = File.OpenRead(fileLocation);
    Car result = imageConfig.Deserialize(fs) as Car;

    return result;
}

Natürlich könnte man das Filestream durch einen Memory ersetzt die XML-Daten direkt aus dem Speicher zu lesen.

Einmal im Html, es zu so etwas wie dies übersetzen würde:

<!-- It is assumed that MyCar is a public property of the current page. -->
<div>
   Car Model : <%= MyCar.Model %> <br/>
   Car Make : <%= MyCar.Make %>
</div>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top