0

我想将我的 UI 与网页上的一组 XElement 及其属性绑定。假设,这可能适用于表示 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 --%>
4

1 回答 1

0

我通常使用带有 [XmlRoot]、[XmlElement]、[XmlAttribute] 的“占位符”类,并且我将 xml 传递给反序列化器,它为我提供了占位符类型的对象。完成此操作后,唯一要做的就是对强类型对象进行一些基本的 DataBinding。

这是一个“启用 Xml”的示例类:

[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>
于 2008-10-22T12:01:03.717 回答