JSP에서 XML 데이터를 다룰 때 XPath 표현식의 결과 값을 변수에 담아두면 재사용성이 크게 향상됩니다. 이때 유용하게 쓰이는 것이 바로 JSTL XML 태그 라이브러리의 <x:set> 태그입니다.
<x:set> 태그는 XPath 표현식을 평가한 결과를 지정한 변수에 저장하는 역할을 합니다. 흥미로운 점은 결과 값의 데이터 타입에 따라 자동으로 적절한 Java 객체가 생성된다는 것입니다.
- 결과가 불리언(boolean)인 경우 →
java.lang.Boolean객체 - 결과가 문자열(string)인 경우 →
java.lang.String객체 - 결과가 숫자(number)인 경우 →
java.lang.Number객체
<x:set> 태그의 주요 속성
<x:set> 태그는 아래와 같은 속성들을 제공합니다.
| 속성 | 설명 | 필수 여부 | 기본값 |
|---|---|---|---|
| var | XPath 표현식의 결과 값을 저장할 변수 | 필수 | Body |
| select | 평가할 XPath 표현식 | 선택 | None |
| scope | var 속성에 지정한 변수의 유효 범위(scope) | 선택 | Page |
사용 예제
다음 예제는 <x:set> 태그를 활용해 XML 문서에서 특정 노드 집합을 추출하여 변수에 저장하고, 그 결과를 화면에 출력하는 방법을 보여줍니다.
<%@ taglib prefix = "c" uri = "https://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix = "x" uri = "https://java.sun.com/jsp/jstl/xml" %>
<html>
<head>
<title>JSTL Tags</title>
</head>
<body>
<h3>Books Info:</h3>
<c:set var = "xmltext">
<books>
<book>
<name>Padam History</name>
<author>ZARA</author>
<price>100</price>
</book>
<book>
<name>Great Mistry</name>
<author>NUHA</author>
<price>2000</price>
</book>
</books>
</c:set>
<x:parse xml = "${xmltext}" var = "output"/>
<x:set var = "fragment" select = "$output//book"/>
<b>The price of the second book</b>:
<c:out value = "${fragment}" />
</body>
</html>코드를 살펴보면 먼저 <c:set> 태그로 XML 문자열을 xmltext 변수에 담고, <x:parse> 태그로 이를 파싱하여 output 변수에 저장합니다. 그다음 <x:set> 태그의 select 속성에 XPath 표현식 $output//book을 지정해 모든 book 노드를 fragment 변수에 할당합니다.
위 JSP 페이지를 실행하면 다음과 같은 결과가 출력됩니다.
Books Info: The price of the second book:[[book: null], [book: null]]
정리
<x:set> 태그는 XPath 표현식의 평가 결과를 변수에 저장함으로써, 동일한 표현식을 반복해서 작성할 필요 없이 여러 위치에서 재사용할 수 있게 해줍니다. 특히 XML 문서에서 특정 노드나 값을 반복적으로 참조해야 하는 경우 코드의 가독성과 유지보수성을 크게 높여주므로, JSTL XML 처리 시 적극적으로 활용해 볼 만합니다.