특별한 일상

[jsp/servlet] JSTL 사용법 : XML 태그 <x: 본문

IT•개발 끄적/Jsp&Servlet

[jsp/servlet] JSTL 사용법 : XML 태그 <x:

소다맛사탕 2021. 4. 22. 11:25
반응형

오늘은 JSTL(표준 태그 라이브러리) 에서 XML 태그 라이브러리에 대한 사용법을 알아 보겠습니다.

 

XML 태그 라이브러리를 사용하려면 앞서서 상단 선언에 이와 같이 선언한다.

<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

※ XML 태그 라이브러리

XML 태그에 들어가기전에 XPath라는 것을 이해해야 합니다.
XPath는 xml 소스트리의 위치를 지정해주기 위한 경로지정 문법으로 XSLT와 XPointer를 위해서 만들어진 것입니다.
'/' 절대경로, '//' 모든영역선택
기능 분류 태그 설명
기본 기능 out XPath에 지정된 패턴에 따라 xml 내용을 출력.
parse xml 문서를 읽어서 파싱.
set XPath에 따라 선택된 내용을 변수에 저장.
흐름 제어 choose 다중 조건을 처리할때 사용.
forEach 콜렉션이나 Map의 각 항목을 처리할 때 사용.
if 조건에 따라 내부 코드를 수행.
변환 기능 transform xml과 xslt 파일을 결합해서 새로운 문서를 생성.

 

 

1. 기본 기능 태그

1-1. <x:out> 태그

<x:out select="XPathExpression" [escapseXml="(true|false)"] />
---ex>
<x:out select="$param:phone">
<%-- 
    request.getParameter("phone")
    ${param.phone}
    XPath 통한 내장객체 접근 표현
    $param:phone
--%>	 

 

1-2. <x:parse> 태그

/* String 또는 Reader 객체로 지정된 XML 문서에서 */
<x:parse xml="XMLDocument" {[var="변수"] [scope="영역"]
|[varDom="DOM변수"] [scopeDom="DOM영역"]}
[systemId="시스템ID"] [filter="필터"] />
<x:parse xml="XMLDocument" ... >파싱할XML문서</x:parse>
<%-- body 내용을 지정된 XML 문서에서는 
     xml="XMLDocument"를 제거한다
     DOM영역은
     page, request, session, application 중 하나
--%>

---ex>
<x:parse var="objParam">
<phones>
   <info>
       <num>01011112222</num>
       <id>data1</id>
   </info>
   <info>
       <num>01012341234</num>
       <id>data2</id>
   </info>
</phones>
</x:parse>
<%-- xml 데이터를 objParam 변수에 할당 --%>
<c:out select="$objParam//info[1]/num" />
<c:out select="$objParam//info[last()]/num" />
<%-- XPath를 이용해 objParam에서 추출 --%>

 

1-3. <x:set> 태그

<x:set select="XPathExpression" [var"변수"] [scope="영역"] />
<%-- 영역은 page, request, session, application 중 하나
--%>
<%-- 선택된 내용을 변수에 저장하는것.
     변환기능 transform 태그 예제로 대체
--%>

 

2. 흐름 제어

2-1. <x:choose> 태그( <x:when> <x:otherwise> )

<x:choose>
    <x:when select="XPathExpression">
       ...
    </x:when>
    <x:when select="XPathExpression">
       ...
    </x:when>
    <x:otherwise>
       ...
    </x:otherwise>
</x:choose>
<%-- 조건1 true면 조건1의 내부 블록 수행,
     조건1 false, 조건2 true면 조건2 내부 블록 수행,
     조건1 false, 조건2 false면 otherwise 내부 블록 수행 --%>

 

2-2. <x:forEach> 태그

/* XPath에 따라 해당하는 자원 수만큼 반복(for) */
<x:forEach [var="변수"] select="XPathExpression">
   ...
</x:forEach>
---ex>
<x:parse var="objParam">
   ...
</x:parse>
<x:forEach select="$objParam//info">
   ...
   <tr>
      <td><input type="text"><x:out select="num" /></input></td>
   </tr>
</x:forEach>
<%-- parse로 선언된 objParam에
     num을 가져와 쓴다. --%>

 

2-3. <x:if> 태그

<x:if select="XPathExpression" var="변수" [scope="영역"] />
<x:if select="XPathExpression" var="변수" [scope="영역"]>
   ...
   조건 영역
</x:if>
<%-- 영역은 page, request, session, application 중 하나
--%>

 

3. 변환 기능

3-1. <x:transform> 태그 ( <x:param> )

/* body없음 */
<x:transform xml="XMLDocument" xslt=XSLTSylesheet"
[xmlSystemId="XMLSystemId"] [xsltSystemId="XSLTSystemId"]
[{var="변수" [scope="영역"]|result="결과"}] />
/* 변환파라미터 <x:param /> */
<x:transform xml="XMLDocument" xslt=XSLTSylesheet"
[xmlSystemId="XMLSystemId"] [xsltSystemId="XSLTSystemId"]
[{var="변수" [scope="영역"]|result="결과"}]>
   ...
   <x:param/>
</x:transform>
/* xml="XMLDocument"제거 , 
 선택적 변환 파라미터 xml문서옵션 <x:param /> */
<x:transform xslt=XSLTSylesheet"
xmlSystemId="XMLSystemId" xsltSystemId="XSLTSystemId"
[{var="변수" [scope="영역"]|result="결과"}]>
   XMLDocument Optional
   <x:param/>
</x:transform>
<%-- 
   <x:param name="obj" value="objVal" />
--%>
---ex>
<html>
<c:set var="xml">
  <?xml version="1.0" encoding="utf-8"?>
  <info>
     <phone>
        <num>01012341234</num>
        ...
     </phone>
  </info>
</c:set>
<c:set var="xsl">
  <?xml version="1.0"?>
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Trasform"
version="1.0">
  <xsl:template match="/">
     ...
  <xsl:for-each select="info/phone">
    <tr>
      <td><xsl:value-of select="num" /></td>
      ...
    </tr>
  <xsl:for-each>
  </xsl:stylesheet>
</c:set>
<x:transform xml="${xml}" xslt="${xsl}"/>
<%-- info.xml, info.xsl 파일을 직접 선언
--%>
---ex2>
<c:import var="xml" url="info.xml" charEncoding="utf-8" />
<c:import var="xsl" url="info.xsl" charEncoding="utf-8" />
<x:transform xml="${xml}" xslt="${xsl}"/>
<%-- 코어 태그를 이용해 간접 선언
--%>

 

 

솔직히 XML 태그는 잘 사용해 본적도 없고, 참고할만한 책이나 문서가 적기 때문에

API 문서를 통해 더 자세하게 알아봤으면 좋겠다.

Comments