문제

웹 페이지에서 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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top