ASP.NET에서 XML 파일 읽기  


기존의 ASP에서 XML 데이터를 보기 위해서는 두가지 방법을 사용할 수 있었다. 첫째는 ADO 2.5를 사용하여 레코드셋으로 XML 데이터를 불러들여서 이를 웹페이지에 보여주는 방법이다. 두번째는 MSXML 컴포넌트를 사용하여 XML 파일의 내용을 읽어들여서 XSLT를 사용하여 보여주는 방법이다. 이와 유사한 방법으로 만약 여러분이 데이터베이스의 결과처럼 데이터 컬렉션처럼 사용하고 싶다면 XML Stream을 사용하여도 된다.

ASP.NET에서도 역시 다양한 방법을 사용할 수 있다. XSL을 통해서 XML 데이터를 보고자 한다면 서버컨트롤을 사용하면 된다.(<asp:xml runat="server" ... />) 만약 각 노드마다 다양한 작업을 수반한다면 MSXML 컴포넌트와 비슷한 기능을 수행하는 System.Xml 네임스페이스를 추가하여 사용하면 된다. 여기에 데이터 그리드를 추가하여 보여준다면 정렬등의 작업을 아주 손쉽게 할 수 있다. 이 글에서는 XML 데이터를 데이터 그리드를 사용하여 쉽게 보여줄수 있다는 것을 알려줄것이며 또한 XML에 쉽게 기록할 수 있다는 것도 다룰 것이다.

데이터셋에 XML 데이터 넣기

데이터셋은 프로바이더 중립적이다. 이 말은 데이터 프로바이더가 SQL 데이터 프로바이더이건 OLEDB 데이터 프로바이더이건 XML 파일이건간에 가리지 않는다는 것이다. 또한 비연결 데이터 저장 객체이기 때문에 데이터 프로바이더와 한번만 연결하여 데이터를 가지고 온 후에는 데이터 프로바이더와 연결하지 않고도 데이터를 다룰 수 있다. 하지만 데이터리더에 비해 강력한 반면 성능은 나쁘다.

XML 파일로 부터 데이터셋을 생성하는 것은 매우 쉽니다. 단순히 ReadXml 메서드를 호출하면 된다. 다음은 ReadXml 메서드를 사용하여 XML 데이터를 불러들여 데이터셋에 저장하고 데이터그리드에 보여주는 예이다.

<%@ import Namespace="System.Data" %>
<script-x runat="server">
sub Page_Load(sender as Object, e as EventArgs)
Dim myDataSet as New DataSet()

myDataSet.ReadXml(Server.MapPath("books.xml"))

dgBooks.DataSource = myDataSet
dgBooks.DataBind()

dgBooksPretty.DataSource = myDataSet
dgBooksPretty.DataBind()
end sub
</script-x>

<html>
<body>
<b>The Contents of the XML File
<a href="/demos/books.xml"><code>books.xml</code></a></b><br />
<asp:datagrid id="dgBooks" runat="server" />

<p align="center">
<b>A Nicer Looking DataGrid Representation of the XML File
<a href="/demos/books.xml"><code>books.xml</code></a></b><br />
</p>
<asp:datagrid id="dgBooksPretty" runat="server"
AutoGenerateColumns="False"
Font-Name="Verdana"
Font-Size="Small"
HorizontalAlign="Center"
ItemStyle-BackColor="#FFFFCC"
AlternatingItemStyle-BackColor="#EEEEEE">

<HeaderStyle BackColor="Red" HorizontalAlign="Center"
ForeColor="White" Font-Bold="True" />

<Columns>
<asp:BoundColumn HeaderText="Title" DataField="title" />
<asp:BoundColumn HeaderText="Author" DataField="author" />
<asp:BoundColumn HeaderText="Year" DataField="year" />
</Columns>
</asp:datagrid>




Import 디렉티브를 사용하여 System.Data 네임스페이스를 명시하였다. 이 네임스페이스에는 데이터셋 클래스각 포함되어 있다. 다음에는 Page_Load 이벤트 핸들러에서 새로운 데이터셋을 하나 생성하고 ReadXml 메서드를 사용하여 book.xml 파일에서 읽어온 내용을 데이터셋에 저장하고 데이터그리드의 DataSource 속성에 데이터셋을 지정하고 DataBind() 메서드를 사용하여 웹페이지에 보여준다.

데이터셋의 내용을 XML 파일로 기록

앞에서 보았듯이 XML 파일에서 데이터를 읽어들여서 생성한 데이터셋에 저장하는 것이 쉽다는 것을 보았다. 이번에는 반대로 데이터셋의 내용을 XML 파일에 저장하는 것을 보도록 하자. 이때는 WriteXml 메서드를 사용하면 된다.

<%@ Import Namespace="System.Data" %>
<script-x runat="server">
sub Page_Load(sender as Object, e as EventArgs)
Dim myDataSet as New DataSet()

'Populate the DataSet somehow
...

'Write the DataSet's contents to an XML file
myDataSet.WriteXml(filename)



명시한 파일로 XML 데이터를 쓰는 것을 보여주고 있다. 만약 여러분이 XML 데이터뿐만 아니라 XML 스키마까지 같이 기록하고 싶다면 myDataSet.WriteXml(filename, XmlWriteMode.WriteSchema)라고 수정해주면 된다. ADO 2.5를 사용해도 이같은 기능을 수행할 수 있지만 사람이 보기에는 매우 어렵다. 하지만 ADO.NET의 데이터셋은 가독성도 좋다. 매우 직관적이 않은가?

'Web(웹) Study > ASP .NET' 카테고리의 다른 글

ASP 기본 다지기  (0) 2008.07.31
웹서버 컨트롤  (0) 2008.07.15
VBScript개요와 기본적인 사용법  (0) 2008.07.15
데이터그리드로 데이터 전송  (0) 2008.07.15
Global.asa 파일의 구성  (0) 2008.07.15

+ Recent posts