태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
페이지를 읽고 있습니다. ( 아쿠아바다's Blog )
분류 전체보기 (769)
쉐어포인트 (24)
Exchange (12)
SQL (121)
XML (36)
WEB (294)
O / S (97)
삶의향기 (162)
기획 (19)
RSS 피드(IE 7.0부터 기본 지원됩니다. 이전 버전 사용자는 접합한 툴을 사용하세요!!)

5분 강좌 XML copy, copy-of, apply-templates, valu

XML 2007/06/07 13:56 by 아쿠아바다
copy, copy-of, apply-templates, value-of 등등 한꺼번에...

번역해보면,

복사하다, 복사본, 템플릿을 적용하다, 값

기능도 뜻과 비슷합니다.

- 현재노드의 태그를 복사
- 현재노드 전체를 복사
- 특정 노드를 템플릿에 할당
- 현재값을 출력

예를들어봅니다.

<a><b>1</b></a>

위와같은 xml. 인제 xslt는,

<xsl:template match='/'>
<xsl:apply-templates select='a'/>
</xsl:template>

보통 이런식으로 시작합니다. 여기서 apply-templates는 select와 함께 쓰여, 현재 컨텍스트에서 노드 a에 템플릿을 적용합니다. 쉽게말하면 다음 작업을 노드 a에서 시작하라는것. 인제 다음 템플릿은 이런식으로 될겁니다.

<xsl:template match='a'>
<xsl:copy/>
</xsl:template>

위의 두 템플릿이 들어있는 xslt를 실행시키면 결과는,

<a/>

입니다. 여기서 우리는 copy의 기능을 알수있습니다. 별거아니죠, 그저 껍질만 결과트리에 복사하는것입니다. 두번째 템플릿을 좀 고쳐보면,

<xsl:template match='a'>
<xsl:copy-of select='.'/>
</xsl:template>

우리는 다음과 같은 결과를 얻습니다.

<a><b>1</b></a>

다시말해 원본 xml과 똑같은 결과입니다. 왜그런지... 위 두번째 템플릿의 제목을 주목하시면, 현재 컨텍스트가 노드 a입니다. 노드 a는 전체 xml의 루트입니다. 그런데,

copy-of select='.'

이 경우 현재 컨텍스트 전체를 복사하라는 명령이므로 당연히 전체 xml을 복사한것입니다. 한편 copy, copy-of 를 좀더 다르게 사용해봅니다.

<xsl:template match='a'>
<xsl:copy>
<xsl:copy-of select='b'/>
</xsl:copy>
</xsl:template>

이것 또한 같은 결과를 얻습니다. 전체 xml. 이번에는 copy, copy-of를 가지고 각각 a노드 껍질만 복사, b노드 전체를 복사했기 때문입니다. 같은 컨텍스트에서 이번엔 value-of를,

<xsl:template match='a'>
<xsl:copy>
<xsl:value-of select='b'/>
</xsl:copy>
</xsl:template>

결과는,

<a>1</a>

입니다. 중간에 <b> 태그가 쏙 빠지고 값만 출력됩니다. 그것이 value-of의 기능입니다. b노드를 가지고 우리가 좀더 복잡한 일을 해야 한다면 이렇게 할것입니다.

<xsl:template match='a'>
<xsl:copy>
<xsl:apply-templates select='b'/>
</xsl:copy>
</xsl:template>

그리구선 아래에 템플릿을 하나 더,

<xsl:template match='b'>
<xsl:value-of select='. + 1'/>
<xsl:template>

우리는 인제 다음과 같은 결과를 얻습니다.

<a>2</a>

첨 공부하실땐 이런식으로 템플릿을 적용해가면서 템플릿을 나눠서 하시는게 한 템플릿에서 한꺼번에 하는것보다 좋습니다.

그동안 이야기 중에서 '컨텍스트'란 용어에 익숙해지셨기 바랍니다. 이것은 나의 현재 위치를 말합니다. XML의 정글에서 헤맬땐 내가 현재 어디있는지 햇갈릴때가 많습니다. 모든 XPATH 축은 나의 현재위치를 기준으로 하기 때문에, 이런 설명용 용어에도 함께 익숙해져야 합니다. 그리고 apply-templates는 나의 현재 위치를 바꾸는 기능을 합니다. 자식으로, 조상으로, 아래형제로, 위 형제로...

한편 apply-templates는 혼자 쓰이면 'value-of select'와 같은 일을 하기도 합니다. 예를 들어 위 마지막 템플릿을 좀바꿔보면,

<xsl:template match='b'>
<xsl:apply-templates/>
<xsl:template>

이때 apply-templates는 그냥 b노드의 값을 그대로 복사합니다. 반복하자면,

<xsl:value-of select='.'/>

와 똑같은 일을 합니다. 어느것을 쓰느냐는 취향의 문제입니다. 오늘강좌,

apply-templates, value-of, copy, copy-of

는 사실상 xslt 전체라고해도 과언이 아닙니다. 이 네가지면 왠만한 일은 거의다 할수 있습니다. xpath만 좀 알면... 이외에 call-template, mode 같은것들이 있지만 apply-templates에 익숙하다면 저절로 알아집니다. 다음엔 xpath에 관해 설명합니다.
좀더 흥미로운 내용이 많이 있습니다.. HOME > XML를 확인하세요
TAG   
0 Trackback, 0 Comment, :
1  ... 483 484 485 486 487 488 489 490 491  ... 769 
Statistics Graph
Total : 557,403 Today : 33