Programming/.NET

XmlDataSource 컨트롤의 주된 목적은 XML 데이터를 소스로 로드하는 것입니다. XmlDataSource라고 크게 다른건 없고 데이터를 다루는 대상만 XML일뿐 SqlDataSource와의 기본개념은 같습니다. <코드 1-1> 은 DataFile 속성을 사용해 프로젝트내에 존재하는 test.xml 파일을 로드하도록 설정한 샘플입니다.

<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/test.xml"></asp:XmlDataSource>

▶ <코드 1-1>

XmlDataSource 컨트롤은 XML 데이터를 처리하기 위한 대부분의 작업에 사용될 수 있습니다. 파일형태가 아닌 메모리상의 XML 데이터를 다룰 수 있을 뿐만 아니라 XML과 XSLT를 필요한 포멧에 맞게 쉽게 변환이 가능하도록 하며 XPath 쿼리를 사용해 XML 의 특정 요소를 가져올 수도 있습니다. 물론 필요하다면 해당 XML에 대해 기본적인 추가, 삭제, 변경등의 작업등도 가능합니다.

<form id="form1" runat="server">
<div>
    <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/books.xml" XPath="//catalog/book"></asp:XmlDataSource>
    <asp:DataList ID="DataList1" runat="server" DataSourceID="XmlDataSource1">
        <ItemTemplate>
            <%# XPath("title"%>의 장르는 <%# XPath("genre"%> 입니다.
        </ItemTemplate>
    </asp:DataList>
</div>
</form>

기본적인 사용법은 위와 같습니다. XmlDataSource 컨트롤에서 DataFile을 통해 XML파일을 지정하고 XPath속성으로 어떤 요소를 가져올지 지정합니다. 그리고 DataList컨트롤과 연결해 가져온 요소를 가공해서 보여주는 방식입니다.

여기서 DataFile속성에 주목할 필요가 있는데 이 속성의 값으로는 반드시 해당 서버에 존재하는 XML일 필요는 없습니다. 가능하다면 RSS와 같은 특정 사이트의 XML데이터를 가져오는 것도 가능합니다.

<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile=http://www~/rss XPath="//catalog/book"></asp:XmlDataSource>

이 밖에 Data 속성도 존재하는데 이 속성은 메모리나 데이터베이스에 저장된 XML 데이터를 로드하는데 사용됩니다.

FileStream fs = new FileStream(@"C:\test.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.Read);

XmlDocument xDoc = new XmlDocument();
xDoc.Load(fs);

XmlDataSource1.Data = xDoc.InnerXml;
XmlDataSource1.DataBind();

단, 만약 Data 와 DataFile 속성이 같이 설정되어 있다면 DataFile 설정내용이 우선적으로 적용됩니다.

XmlDataSource 컨트롤은 XML 데이터를 로드할 뿐만 아니라 필요하다면 다시 외부로 내보낼 수도 있는데 이를 위해 GetXmlDocument 와 Save 두개의 메소드를 제공합니다. GetXmlDocument 는 로드된 XML을 다시 XmlDocument 형식으로 반환하도록 하며

XmlDocument xDoc = new XmlDocument();
xDoc = XmlDataSource1.GetXmlDocument();
Save 는 로드된 XML 파일을 다시 저장하는 역활을 수행합니다. 물론 XML 파일이 로드되고 난 이 후 XML 파일이 구조적으로 변화되었다면 지금까지의 변경된 부분은 Save 메소드에 의해 로드된 원본 XML 파일에 그대로 반영될 것입니다.

XML 을 다루기 위한 여러 속성이 XmlDataSource 컨트롤에 존재하지만 그 외 다른 쓸만한 이벤트도 존재합니다. 그 중 OnTransforming 은 XSLT 가 Transform 이나 TransformFile 속성이 적용되기 전에 발생하는 이벤트로서 필요하다면 XSLT 에 대한 추가적인 작업을 수행할 수 있습니다.
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/test.xml" TransformFile="~/test.xslt" OnTransforming="XmlDataSource1_Transforming"></asp:XmlDataSource>
protected void XmlDataSource1_Transforming(object sender, EventArgs e)
{
    XsltArgumentList xslSite = new XsltArgumentList();
    xslSite.AddParam("site", "", Request.Url.Host);

    ((XmlDataSource)sender).TransformArgumentList = xslSite;
}
0 0