관리 메뉴

ㄴrㅎnㅂrㄹrㄱi

XSL과 XPath 본문

프로그래밍/XML

XSL과 XPath

님투 2009. 1. 3. 08:49
반응형

1. XSL (eXtensible Stylesheet Language)
XSLT (XSL Tranformation) : XML문서를 또 다른 XML문서나 비XML문서로 변환 (문서구조 변환)
XSL:FO : 문서 포멧을 변환 (XML -> DOC, XML -> PDF)

여기서 FO는 Formatting Object를 말합니다.

아래처럼 두개의 구조가 있다고 합시다.
a구조

<root>
    <a>aa</a>
</root>


b구조
<데이터>
    <자료>aa</자료>
</데이터>
위의 코드를 짠다면 위의 <root>와 아래의 <데이터>는 전혀 다른 테이블이지만 데이터 "aa"는 같다는 걸 알 수 있습니다.
XSLT는 복수개의 데이터를 가져와서 새로운 형태를 만드는 것도 가능합니다.
우리가 보통 XSML작업할 때 많이 하는건 하나의 XML->HTML 이나 XML->다른 종류로 바꿀 때 많이 사용합니다.
간단하게 이러한 작업들을 '문서변환작업'이라고 합니다.
             
우리는 데이터를 뽑아내고 찾은 데이터를 새로운 엘리먼트로 만들고 속성을 만들어서 가져온 데이터를 옮겨놓는 작업을 하게 됩니다.
 원본이 되는 구조를 보통 "Source Tree"라고 하며 새로운 구조를 "Result Tree" 라고 합니다. 그리고 XSLT 엔진이 이 작업을 해줍니다.

XSML에는 XXL파일이 변환작업을 하며 XXL확정자를 가진 파일을 거치면 다른 파일로 거듭나게 됩니다.

 

a. XML 선언문
   1) 공식 선언문(표준) - 가능하면 이 표준을 사용하도록 합시다.
      <xsl:stylesheet version="2.0" xmlns:xsl="
http://www.w3.org/1999/XSL/Transform">
      </xsl:stylesheet>

   2) MS 선언문(비표준)
      <xsl:stylesheet xmlns:xsl="
http://www.w3.org/TR/WD-xsl">

 

b. XML 문서 기본 (*.xsl)
   1) XSL도 XML문서 이기에 선언문을 가집니다.
      <?xml version="1.0" encoding="ecu-kr"?>
      <xsl:stylesheet version="2.0" xmlns:xsl="
http://www.w3.org/1999/XSL/Transform">

      </xsl:stylesheet>

 

c. XSL 문서 적용 (XML 문서에 삽입)
   <?xml-stylesheet href="XSL파일" type="text/xsl"?>

 

 

2. XPath
XML 문서의 노드 접근 표현식
XPath 표현에선 가장 최상위 엘리먼트를 "/"로 표현
독립적으로는 사용하지 못하며 누군가에 섞여서 사용 되어집니다. 문서변환작업이나 dom이라는 곳에서 노드를 찾을 때 사용됩니다.

   1) / : 가상의 루트 노드

   (사실 언어마다 차이가 있습니다. 모든 자원의 근원이 되는 위치이며, 가장 최상위라고 생각하시면 됩니다.)
   예를 들어 <root></root>가 있다고 하면 <root>보다 더 상위에 있는 루트입니다.

   2) * : 노드 전체

   노드라고 표현이 되는건 엘리먼트하고 속성 두 가집니다.
   정확히 구분하면 속성노드 / 엘리먼트노드라고 부릅니다.

 

   3) . : 노드 자신

   여기서는 디렉토리 자신을 말합니다.

 

   4) /a/b/c

   루트 노드의 자식 a의 자식 b의 자식 c를 가르킵니다.
   가상루트 밑에 자식 a가 있고 그 밑에 자식이 b이며 그 밑에 자식이 c란 말입니다.
   아래와 같은 구조에서 c를 찾기 위한 표현입니다.
           <a>
              <b>
                 <c></c>
              </b>
           </a>

------------------------------
           <a>
              <d>
                 <e></e>
              </d>
              <b>
                 
<c></c>
              </b>
           </a>

 

   5) a : 노드 자신 (상대경로)
   /a 와는 다릅니다. 문서의 어디에 위치하고 있느냐에 따라서 달라집니다.
   src="img/aaa"의 표현은 ./img/aaa의 줄임말이며 현재 디렉토리의 하위디렉토리를 찾습니다.
   src="/img/aaa"의 표현은 무조건 홈디렉토리 밑에 있는 하위디렉토리를 찾습니다.

 

   6) //a : 모든 노드 중 a노드
   첫 노드만 탐색하며 위치 및 계층에 상관없이, 즉 코딩 순서대로 a라는 엘리먼트를 찾다가  a를 먼저 찾으면 작업을 완료합니다.

 

   7) a[b] : b노드를 자식으로 갖는 a노드 

   8) a[b='c'] : 자식 b노드가 c텍스트를 갖는 a노드

   9) a[b='c']/d : 자식 b노드가 c텍스트를 갖는 a노드의 자식 d노드

 

   10) a/@b : a노드의 속성 b
         <a b="1">........ 이 녀석에 접근가능하다는 거야. 이제 속성데이터에도 접근가능~
   
   11) 
a[@b] : b속성을 갖는 a노드

   a가 b라는 속성을 갖는 a노드를 찾습니다.

   12) a[@b='c'] : b속성값 c를 갖는 a노드

 

   13) a[@b='c']/d : b속성값 c를 갖는 a노드의 자식 d노드

 

   14) a/@* : a의 모든 속성노드
 
   15) a/* : a의 모든 자식엘리먼트

 

3. XPath 함수
   - name() : 노드명 반환 (ex. a/b/c/name())
   - text() : PCDATA 반환(단, 자신의 PCDATA만..)
   - position() : 노드의 위치 지정(ex. //a[posion()=2])
   - last() : 노드집합의 마지막 노드
   - count() : 노드집합의 갯수
   - sum() : 노드집합의 데이터 합
   - contains() : 데이터 검색
   - stars-width() : 특정 문자열로 시작하는지 유무


nodeXML.xml 파일 만들기
   <?xml-stylesheet href="ex02.xsl" type="text/xsl"?>

   <booklist>
        <book>XML.NET</book>
   </booklist>


nodeXSL.xsl 파일 만들기
   <xsl:stylesheet version="2.0" xmlns:xsl="
http://www.w3.org/1999/XSL/Transform">

       <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes" />

       <xsl:template match="/">
             <도서목록>
                   <도서><xsl:value-of select="/booklist/book" /></도서>
             </도서목록>
       </xsl:template>
   </xsl:stylesheet>


출처 : http://blog.naver.com/PostView.nhn?blogId=ngmaster&logNo=120039667441

반응형

'프로그래밍 > XML' 카테고리의 다른 글

XSL 템플릿  (0) 2009.01.03
AJAX ? XML 처리를 이용해서 RSS리더기 만들기  (0) 2007.11.03
W3C(XML)  (0) 2007.10.28
Comments