JSTL XML处理需c:import与x:parse配合:c:import属核心库,用于导入XML源内容;x:parse属XML库,解析为DOM对象供XPath查询;需正确引入Jakarta EE版依赖并声明标签库URI。

JSTL XML标签库本身不直接处理XML解析和导入,c:import 属于 JSTL 核心标签库(core),而 x:parse 才属于 JSTL XML 标签库(xml)。两者常配合使用:先用 c:import 获取 XML 内容(如远程 URL 或本地资源),再用 x:parse 解析为可遍历的 XML 对象。
准备:引入依赖与标签库声明
确保项目中包含 JSTL 1.2+(推荐使用 Jakarta EE 版本):
- Maven 依赖(Jakarta EE 风格):
jakarta.servlet.jsp.jstl
jakarta.servlet.jsp.jstl-api
2.0.0 - JSP 页面顶部声明标签库:
java.sun.com/jsp/jstl/core" %>
(注意:Jakarta EE 下 URI 可能为https://jakarta.ee/xml/ns/jstl/core和https://jakarta.ee/xml/ns/jstl/xml,取决于容器支持)
c:import —— 安全获取 XML 源内容
c:import 用于读取外部资源(文件、URL、字符串),是 x:parse 的前置步骤。它不解析 XML,只提供原始内容或输入流。
- 从本地文件导入(Web 应用内路径):
- 从远程 URL 导入(需容器允许,部分服务器默认禁用):
- 导入后内容存入 pageScope 变量(如
xmlContent),供x:parse使用 - ⚠️ 注意:
c:import默认不支持跨域 HTTP 请求;若需 HTTPS 或带参数,建议用构造或后端预加载
x:parse —— 解析 XML 并构建可查询对象
x:parse 将字符串或 InputStream 解析为 org.w3c.dom.Document 类型的对象,支持 XPath 查询。
- 基本用法(解析
c:import得到的内容): - 指定解析选项(如忽略 DTD、设置命名空间):
filter="false" ignore="true" /> - 若 XML 含命名空间(如 Atom/RSS),需配合
x:namespace声明前缀,否则 XPath 查询可能失败
用 x:forEach + x:out 遍历和提取数据
解析完成后,用 x:forEach 配合 XPath 表达式遍历节点,x:out 输出值。
- 示例:解析一个简单 RSS 的 item 列表:
- XPath 中
$item是当前迭代节点,text()提取文本内容,避免输出标签 - 支持常见 XPath 函数(
normalize-space()、substring()等),但语法受限于 JSTL 实现










