XML 속성에 대해 웹 UI를 어떻게 바인딩해야합니까?
-
02-07-2019 - |
문제
웹 페이지에서 Xelements와 그 속성 모음에 대해 UI를 바인딩하고 싶습니다. 가설 적으로, 이것은 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;
}
물론, 메모리 스트림으로 파일 스트림을 교체하여 메모리에서 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