JSP의 JSTL XML 라이브러리에서 제공하는 <x:forEach> 태그는 XML 문서 내의 노드들을 순회(iteration)하며 반복 처리할 때 사용됩니다. XPath 표현식으로 특정 노드 집합을 선택한 후, 각 노드에 대해 지정된 본문(body) 내용을 반복 실행합니다.
x:forEach 태그의 주요 속성
<x:forEach> 태그는 다음과 같은 속성을 지원합니다.
| 속성 | 설명 | 필수 여부 | 기본값 |
|---|---|---|---|
| select | 평가(evaluate)할 XPath 표현식을 지정합니다. | 예 | 없음 |
| var | 반복 시마다 현재 항목(current item)을 저장할 변수의 이름입니다. | 아니오 | 없음 |
| begin | 반복을 시작할 시작 인덱스입니다. | 아니오 | 없음 |
| end | 반복을 종료할 종료 인덱스입니다. | 아니오 | 없음 |
| step | 컬렉션을 순회할 때 인덱스가 증가하는 크기(간격)입니다. | 아니오 | 없음 |
| varStatus | 반복 상태 정보를 저장할 변수의 이름입니다. | 아니오 | 없음 |
사용 예제
다음 예제는 <x:forEach> 태그를 활용하여 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 x:forEach 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"/>
<ul class = "list">
<x:forEach select = "$output/books/book/name" var = "item">
<li>Book Name: <x:out select = "$item" /></li>
</x:forEach>
</ul>
</body>
</html>
위 코드의 동작 흐름을 살펴보면 다음과 같습니다.
- <c:set> 태그로 XML 문자열을 변수
xmltext에 저장합니다. - <x:parse> 태그로 해당 XML 문자열을 파싱하여
output변수에 담습니다. - <x:forEach> 태그의
select속성에 XPath 표현식인$output/books/book/name을 지정하여 모든 책 이름 노드를 순회합니다. - 각 반복마다 현재 노드가
item변수에 저장되고, <x:out> 태그로 그 값을 출력합니다.
이 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
Books Info: Book Name: Padam History Book Name: Great Mistry