Pregunta

Quiero vincular mi IU contra una colección de XElements y sus propiedades en una página web. Hipotéticamente, esto podría ser para cualquier objeto que represente un árbol XML. Espero que haya una mejor manera de hacerlo.

¿Debo usar una consulta XPath para sacar los elementos de la colección y los valores de los atributos de cada XElement? ¿Hay algún tipo de objeto diseñado para facilitar la vinculación de datos contra XML?

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

Solución

Normalmente uso un "marcador de posición" clase con [XmlRoot], [XmlElement], [XmlAttribute] y tengo el xml pasado a un deserializador que me da un objeto del tipo del marcador de posición. Una vez hecho esto, lo único que queda por hacer es un enlace de datos básico a un objeto fuertemente tipado.

Aquí hay una clase de muestra que es " Xml Enabled " ;:

[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 ;}
}

Y aquí está cómo deserializarlo correctamente desde un archivo:

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;
}

Por supuesto, puede reemplazar FileStream por un MemoryStream para leer el Xml directamente de la memoria.

Una vez en el HTML, se traduciría en algo como esto:

<!-- It is assumed that MyCar is a public property of the current page. -->
<div>
   Car Model : <%= MyCar.Model %> <br/>
   Car Make : <%= MyCar.Make %>
</div>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top