我应该如何将Web UI与XML属性绑定?
-
02-07-2019 - |
题
我想将我的UI与网页上的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传递给反序列化器,它给了我一个占位符类型的对象。完成后,剩下要做的就是对强类型对象进行一些基本的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;
}
当然,你可以用MemoryStream替换FileStream来直接从内存中读取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>
不隶属于 StackOverflow