Я хочу привязать свой пользовательский интерфейс к коллекции XElements и их свойств на веб-странице. Гипотетически это может быть любой объект, представляющий дерево XML. Я надеюсь, что может быть лучший способ сделать это.
Следует ли использовать запрос XPath для получения элементов коллекции и значений атрибутов каждого (в данном случае) XElement? Существует ли тип объекта, предназначенный для упрощения привязки данных к XML?
<% foreach(var x in element.Descendants())
{%>
<%= DateTime.Parse(x.Attribute["Time"]).ToShortDate() %>
<% } %>
<%-- excuse me, I just vomited a little in my mouth --%>





Обычно я использую класс «заполнитель» с [XmlRoot], [XmlElement], [XmlAttribute], и мне передается xml в десериализатор, который дает мне объект типа заполнителя. Как только это будет сделано, останется только выполнить базовую привязку данных к строго типизированному объекту.
Вот пример класса «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 ;}
}
А вот как правильно десериализовать его из файла:
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;
}
Конечно, вы можете заменить FileStream на MemoryStream, чтобы читать XML прямо из памяти.
Попав в Html, это будет примерно так:
<!-- It is assumed that MyCar is a public property of the current page. -->
<div>
Car Model : <%= MyCar.Model %> <br/>
Car Make : <%= MyCar.Make %>
</div>