Как мне связать веб-интерфейс с атрибутами XML? - PullRequest
0 голосов
/ 25 сентября 2008

Я хочу привязать свой пользовательский интерфейс к коллекции элементов 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 --%>

1 Ответ

0 голосов
/ 22 октября 2008

Обычно я использую класс-заполнитель с [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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...