JSTL XML 標籤庫 (uri="https://java.sun.com/jsp/jstl/xml") 提供聲明式 XML 處理能力,免去 DOM/SAX 繁瑣代碼。本文系統整理核心標籤、流程控制、轉換標籤語法與屬性表,附實戰提示。
<%@ taglib prefix="x" uri="https://java.sun.com/jsp/jstl/xml" %>
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %> <!-- 配合 c:import 載入 XML -->
<x:parse> - 解析 XML 文檔<!-- 方式 1:解析字串變數 -->
<c:import var="xmlStr" url="data.xml" />
<x:parse doc="${xmlStr}" var="doc" scope="page" />
<!-- 方式 2:解析標籤體內容 -->
<x:parse var="doc" scope="page">
<books><book id="1">Java</book></books>
</x:parse>
關鍵屬性:`doc` (XML 來源字串/Reader)、`var`/`scope` (儲存解析後 Document 物件)、`varDom`/`scopeDom` (儲存 DOM Document)、`systemId` (基礎 URI)、`filter` (SAX Filter)。
<x:out> - 輸出 XPath 選取結果<x:out select="$doc/books/book[1]/@id" />
<x:out select="$doc/books/book/title" escapeXml="false" />
需類路徑含 `xalan.jar` 支援 XPath。`escapeXml="true"` (預設) 會轉義特殊字元。
<x:set> - 將 XPath 結果存入範圍變數<x:set select="$doc/books/book[1]/title" var="firstTitle" scope="request" />
<x:if> - 條件判斷<!-- 無本體:僅存結果 -->
<x:if select="$doc/books/book[@id='1']" var="hasBook" />
<!-- 有本體:條件成立輸出內容 -->
<x:if select="$doc/books/book[@id='1']">
找到 ID=1 的書
</x:if>
<x:choose>, <x:when>, <x:otherwise> - 多重選擇<x:choose>
<x:when select="$doc/books/book[1]/@category='tech'">技術書</x:when>
<x:when select="$doc/books/book[1]/@category='novel'">小說</x:when>
<x:otherwise>其他</x:otherwise>
</x:choose>
<x:forEach> - 迭代節點集合<x:forEach select="$doc/books/book" var="book" varStatus="status" begin="0" end="9" step="1">
<x:out select="$book/title" /> (第 <x:out select="$status.index" /> 筆)
</x:forEach>
屬性:`select` (XPath)、`var` (當前節點變數)、`varStatus` (迭代狀態)、`begin/end/step` (範圍控制)。
<x:transform> - XML 轉換為其他格式 (HTML、文字等)<c:import var="xsltStr" url="style.xsl" />
<x:transform doc="${xmlStr}" xslt="${xsltStr}" />
<!-- 帶參數轉換 -->
<x:transform doc="${xmlStr}" xslt="${xsltStr}">
<x:param name="paramName" value="paramValue" />
</x:transform>
屬性:`doc` (XML 來源)、`xslt` (XSLT 樣式表)、`docSystemId`/`xsltSystemId` (基礎 URI)、`result` (轉換結果物件)、`var`/`scope` (儲存結果 DOM)。
<x:param> - 轉換參數<x:param name="sortOrder" value="desc" />
JSTL XML 標籤庫讓 JSP 頁面能以聲明式方式完成 XML 解析、查詢、迭代、轉換,極大降低 Java 代碼混雜,適合中小型 XML 處理場景。