hoony's web study

asp와 xml

2007. 8. 4. 14:36
728x90
반응형

1장 ASP 와 XML

XML파일을 ASP 프로그램에서 사용하는 방법에는

  1. XML 객체 생성후 xml 문서를 DOM에서 로딩하는 방법
  2. ASP 페이지 내에 인클루드 시키는 방법(Server-side Includes, SSI)
  3. FieSystemObject를 이용하여 XML 문서에 접근 하는 방법

ASP  파일을 사용하는 이유

  • XML 과 XSL의 기능이외에 추가적으로 필요한 기능을 DOM을 이용하여 ASP로 구현하기 위한 것
  •  XML 데이터를 갱신하고 수정 및 기록은 ASP를 활용하며 XML 데이터의 접근 및 읽기는 클라이언트 측 데이터 바인딩 기능을 활용한다.

간단한 예제

asptest1.asp, asptest1.xml, asptest1.xsl의 파일을 준비

asptest1.asp를 익스플로러에서 불러오면 XML 파일과 XSL 파일을 가져와서 화면에 보여줌

[asptest1.asp]

<%

dim oSource, sStyle '// 변수(객체)의 선언                       

'// XML DOM 객체를 생성한다.(asptest1.xml)

Set oSource=Server.CreateObject("Microsoft.XMLDOM")

oSource.async=false

'// DOM 객체에 asptest1.xml 파일을 로드한다

oSource.Load Server.MapPath("asptest1.xml")

'// XML DOM 객체를 생성한다.(asptest1.xsl)

Set oStyle=Server.CreateObject("Microsoft.XMLDOM")

oStyle.async=false

'// DOM 객체에 asptest1.xsl 파일을 로드한다

oStyle.load Server.MapPath("asptest1.xsl")

'// xsl의 폼에 의해 xml을 뿌려준다.

Response.Write oSource.TransformNode(oStyle)

'// 객체를 닫는다.

Set oStyle = nothing

Set oSource = nothing

%>

[asptest1.xsl]

<?xml version="1.0" encoding="euc-kr"?>

<상영영화>

   <영화>

  <제목>인디안썸머</제목>

   <주인공>이미연,박신양</주인공>

   <감독>노효정</감독>

   <개봉날짜>

     <년>2001</년>

     <월>04</월>

     <일>28</일>

   </개봉날짜>

  </영화>

</상영영화>

[http://localhost/asptest/asptest1.asp]

img2.gif

 

2. DOM 의 사용

DOM과 ASP 코딩을 활용하여 서버측에서 XML 문서를 효율적으로 다루는 방법.

DOM을 ASP문서내에서 애용하기 위해서 MSXML 의 인스턴스를 생성해야 함

 http://msdn.microsoft.com/library/default.asp

 

3. ASP와 XML의 결합

ASP에서 XML을 사용한다는 것은 ASP 환경에서 XML 문서를 읽고 관리한다는 의미.

XML객체를 생성하여 ASP의 환경에 삽입된 예

Set objXML = Server.CreateObject("Microsoft.XMLDOM")

//objXML 이라는 객체를 사용하기 위해 생성하는 단계

objXML.load(Server.MapPath("xmldata.xml"))

// 상대ㅡ 경로에 있는 xmldata.xml의 이름을 가진 XML 문서를 로딩한다.

Set objRootElement = objXML.documentElement

// 현재의 노드를 루트노드로 세팅하는 과정.

Set objXML = nothing

// 객체 사용이 끝났음을 처리해 준다.

[asptest2.xml]

<?xml version="1.0" encoding="euc-kr"?>

 <구입도서>

        <신청내역>

          <신청인>홍길동</신청인>

                <제목>해리포터</제목>

        <수량>2</수량>

        <금액>14,000원</금액>

  </신청내역>

  <신청내역>

        <신청인>김동수</신청인>

        <제목>해리가 샐리를</제목>

        <수량>1</수량>

        <금액>12,000원</금액>

        </신청내역>

 </구입도서>


[asptest2.asp]

<%@ Language=VBScript %>

<HTML>

<META http-equiv="Content-Type" content="text/html; charset=euc-kr" />

<HEAD>

<TITLE>asptest2.asp </TITLE>

</HEAD>

<BODY>

<%

dim oSource, myRec, oHTML '// 변수(객체)의 선언                 


'// XML DOM 객체를 생성한다.(asptest2.xml)

Set oSource=Server.CreateObject("Microsoft.XMLDOM")

oSource.async=false


'// DOM 객체에 asptest2.xml 파일을 로드한다

oSource.Load Server.MapPath("asptest2.xml")


Set myRec = oSource.documentElement


  oHTML = oHTML & myRec.childNodes(0).text

  oHTML = oHTML & "<br/><br/>"

  oHTML = oHTML & myRec.childNodes(1).text


  Response.Write oHTML


'// 객체를 닫는다.

Set oSource = nothing

%>

</BODY>

</HTML>


[http://localhost/asptest/asptest2.asp]

img3.gif


4. FileSystemObject(FSO)의 사용

FileSystemObject 에 의한 XML 데이터 접근을 시도

FSO는 Drive, Folder, File과 같은 객체들을 조작하기 위해 많은 메소드를 제공하고 있다.

FSO를 이용하여 XML 문서내의 텍스트 검색을 하기 위한 예제

[asptest3.xml]

<구입도서>

        <신청내역>

          <신청인>홍길동</신청인>

                <제목>해리포터</제목>

        <수량>2</수량>

        <금액>14,000원</금액>

  </신청내역>

  <신청내역>

        <신청인>김동수</신청인>

        <제목>해리가 샐리를</제목>

        <수량>1</수량>

        <금액>12,000원</금액>

        </신청내역>

 </구입도서>


 [asptest3.asp]

<%@ Language=VBScript%>

<HTML>

<META http-equiv="Content-Type" content="text/html; charset=euc-kr" />

<HEAD>

</HEAD>

<BODY>

    <%

    ' 변수를 선언한다.

    Dim objFso, objFile, strXML, strValue

    ' FileSystemObject 인스턴스를 생성한다.

    Set objFso = CreateObject("Scripting.FileSystemObject")

    ' 상대경로의 텍스트 파일을 연다.

    Set objFile = objFso.OpenTextfile(Server.MapPath("asptest3.xml"),1,False)

    ' 전체의 파일을 하나의 문자열로서 읽어들인다.

    strXML = objFile.ReadAll

    ' 파일객체를 닫는다.(읽어온 문자열 존재)

    objFile.close

   

    strValue = InStr(strXML, "해리포터")

    If strValue > 0 Then

    ' 조건이 일치하면 Good found 를 출력한다.

        Response.write " 선택하신 책(해리포터)을 찾았습니다."

    Else

    ' 조건이 일치하지 않으면 Bad found 를 출력한다.

        Response.write " 선택하신 책이 존재하지 않습니다."

    End If

    ' 객체를 제거한다.

    Set objFso = nothing

%>

</BODY>

</HTML>

[http://localhost/asptest/asptest3.asp]

 img11-3.gif


5. Server-side-Include(SSI)

서버 사이드 인클루드는 XML 문서를 ASP 코드에 포함시키는 것이다.

ASP 페이지에 삽입할 XML 문서

[asptest4.xml]

<?xml version="1.0" encoding="euc-kr" ?>

<includea>

<includeb>

이것은 인클루드된 파일입니다.<br /><br />

인클루드한 태그 중 HTML태그는 인식을 하여 처리하지만, 그렇지 않은 사용자정의 태그는 HTML에 등록된 태그가 아니므로 인식을 하지 못하고 무시하게 됩니다.<br /><br />

XML에서는 한글태그를 써도 무방하나 HTML로 인클루드 될때에는 태그안에 한글을 사용하면(한글을 아직 완벽히 지원하지 못하므로) 모두 화면에 뿌리게

되므로 이점 주의하기 바랍니다.<br />

</includeb>

<english>

이것은 영문태그 사이에 있는 문자열입니다.<br/>

</english>

<한국어>

이것은 한글태그 사이에 있는 문자열입니다.<br/>

</한국어>

</includea>


[asptest4.asp]

<%@ Language=VBScript %>

<HTML>

  <HEAD>

  </HEAD>

    <BODY>

      <H1> 인클루드 예제 </H1>

       <% response.write "지금 시각은" & now() & "<br/>" %>

       <!-- #INCLUDE file="asptest4.xml" -->

    </BODY>

</HTML>

http://localhost/asptest4.asp]

img11-4.gif

주의 할점: HTML 로써 나타나기 때문에 한글 태그는 인식하지 못하고 그대로 나타남.

인클루드 한  태그중 HTML 태그는 인식하여 처리하고 사용자 정의 태그는 인식하지 못함

XML에서는 한글 태그가 사용되지만 HTML로 인클루드 될 때에는 태그안에 한글이 사용되면인식을 못하고 그대로 나타남


6. ASP 환경에서 XML 문서 데이터 추출

XML데이터 내에 있는 특정값을 DOM을 이용하여 가져오는 형태

DOCUMENT 객체를 생성한 후 이를 기준으로 XML 문서를 로딩하고 인식시킨후 원하는 자료를 루트에서부터 순차적으로 찾아서 결과를 보여주는 것.

XML 문서는 반드시 루트가 존재해야 한다.

[asptest5.xml]

루트 디렉토리 <구입도서>안에 <신청내역>이라는 엘리먼트가 존재한며 각각의 속성을 가지고 있다.

<?xml version="1.0" encoding="euc-kr"?>

 <구입도서>

        <신청내역 number="1">

          <신청인>홍길동</신청인>

                <제목>해리포터</제목>

        <수량>2</수량>

        <금액>14,000원</금액>

  </신청내역>

  <신청내역 number="2">

        <신청인>김동수</신청인>

        <제목>해리가 샐리를</제목>

        <수량>1</수량>

        <금액>12,000원</금액>

        </신청내역>

        <신청내역 number="3">

        <신청인>김유림</신청인>

        <제목>무소유의 기쁨</제목>

        <수량>5</수량>

        <금액>75,000원</금액>

        </신청내역>

 </구입도서>

[asptest5.asp]

<%@ Language=VBScript %>

<HTML>

<META http-equiv="Content-Type" content="text/html; charset=euc-kr" />

<HEAD>

<TITLE>asptest5.asp </TITLE>

</HEAD>

<BODY>

<%

dim oSource, myRec, aHTML, bHTML, cHTML '// 변수(객체)의 선언                  


'// XML DOM 객체를 생성한다.(asptest5.xml)

Set oSource=Server.CreateObject("Microsoft.XMLDOM")

oSource.async=false //비동기모드를 False 한 부분. 파일이 로딩되도록 하는 작업. 큰파일의 경우 로딩과 파싱 시간이 많이 걸릴 수 있다.


'// DOM 객체에 asptest5.xml 파일을 로드한다

oSource.Load Server.MapPath("asptest5.xml")


Set myRec = oSource.documentElement //현재 노드를 루트노드로 세팅하는 과정


For i=0 To myRec.childNodes.Length-1  //For Next 문, 노드는 0부터 시작 i=0


  aHTML = myRec.childNodes(i).getAttribute("number")

  bHTML = myRec.childNodes(i).Attributes(0).text

  cHTML = myRec.childNodes(i).text


  Response.Write "번호 :" & aHTML & "혹은 번호 :" & bHTML & "<br/>" & cHTML & "<p/>"


Next


'// 객체를 닫는다. 객체를 생성후 반드시 해제해 주어야 한다. 그렇지 않으면 자동 소멸되지 않고 메모리등의 할당이 증가하게 된다.

Set oSource = nothing

%>

</BODY>

</HTML>

img11-5.gif

이 문서에 테이블을 만들어서 넣는 예제

[asptest.asp]

<%@ Language=VBScript %>

<%

dim oSource, myRec, aHTML, bHTML, cHTML '// 변수(객체)의 선언                  


'// XML DOM 객체를 생성한다.(asptest5.xml)

Set oSource=Server.CreateObject("Microsoft.XMLDOM")

oSource.async=false


'// DOM 객체에 asptest5.xml 파일을 로드한다

oSource.Load Server.MapPath("asptest5.xml")


Set myRec = oSource.documentElement


%>

 

<HTML>

<META http-equiv="Content-Type" content="text/html; charset=euc-kr" />

<HEAD>

<TITLE>asptest6.asp </TITLE>

</HEAD>

<BODY>

<table border="1" cellspacing="1" cellpadding="1">

 <tr>

  <td bgcolor="pink" align="center" width="100" height="23"><b><font size="2" color="#666666">번호예제1</font></b></td>

  <td bgcolor="pink" align="center" width="100"><font size="2"><b><font color="#666666">번호예제2</font></b></font></td>

  <td bgcolor="pink" align="center" width="300" height="23"><font size="2" color="#666666"><b>내 용</b></font></td>

 </tr>

<%

For i=0 To myRec.childNodes.Length-1


  aHTML = myRec.childNodes(i).getAttribute("number")

  bHTML = myRec.childNodes(i).Attributes(0).text

  cHTML = myRec.childNodes(i).text

%>


 <tr>

  <td bgcolor="B8D7FC" align="center" width="100" height="23"><b><font size="2" color="#666666"><%=aHTML%></font></b></td>

  <td bgcolor="B8D7FC" align="center" width="100"><font size="2"><b><font color="#666666"><%=bHTML%></font></b></font></td>

  <td bgcolor="B8D7FC" align="center" width="300" height="23"><font size="2" color="#666666"><b><%=cHTML%></b></font></td>

 </tr>

<%

Next

%>

</table>

</BODY>

</HTML>


<%

'// 객체를 닫는다.

Set oSource = nothing

%>

img11-6.gif

DOM에서 가장 기본이 되는 개체 형태는  노드(Node)이며 ASP 프로그램시 3개의 개체타입(Document, Node, Child(Nodelosts))에 익숙해야 한다.

1) Document

Dcument는 MSXML 의 인스턴스를 생성할 때 함께 얻어지는 개체로 이 개체의 document-Element 속성의 XML 루트(root) 엘리먼트에 대응 된다. 따라서 이 개체로부터 XML 문서내의 전체 노드들을 접근 할 수 있다.

2) Node

Node는 DOM에서 가장 중요한 것으로 XML 문서내의 엘리먼트, 속성, 처리 명령어 등 모

든 요소들은 이 Node 개체이며, 다른 노드들과 부모 자식 관계 및 형제 관계를 형성한다.

3) Childnodes(Node lists)

문서내의 임의의 노드에 대하여 바로 아래 자식 노드들은 포함한다.

임의의 노드 개체에 대해 DOM 이 제공하는 속성.


속성

설명


노드개체속성중 읽을 수만 있는 것

firstChild

첫 번째 자식 노드

lastChild

마지막 자식노드

nestSibling

해당 노드의 다음 형제 노드

nodeName

노드의 이름(엘리먼트 이름)

nodeType

노드가 엘리먼트인지, 텍스트인지, 속성인지를 담고 있음

parentNode

해당 노드의 부모 노드

presiousSibling


specified

속성값이 할당되어 있는지를 알려줌

읽고 쓸 수 있는것

nodeValue

속성, 주석, CDATA 섹션, 텍스트 노드의 값, 엘리먼트 노드에 대해서는 null이 돌려진다.

콜렉션 속성

attributes

 해당 노드의 속성들에 대한 콜렉션

childNodes

해당 노드의 자식 노드들의 대한 콜렉션



728x90

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading