XSLT中怎么生成多个输出文件 xsl:result-document

3次阅读

xsl:result-document是XSLT 2.0+中生成多个输出文件的核心指令,需指定href属性定义目标URI,支持动态路径构造、格式控制及校验选项,常用于将xml中多个元素分别输出为独立文件。

XSLT中怎么生成多个输出文件 xsl:result-document

在XSLT 2.0及以上版本中,xsl:result-document 是生成多个输出文件的核心机制。它允许你在一次转换过程中,将不同节点集或内容分别写入独立的文件(或URI),而不是仅输出到主结果树。

基本语法与必需属性

xsl:result-document 必须指定 href 属性(目标文件路径/URI),且需配合 XSLT 2.0+ 处理器(如 Saxon-HE/PE/EE、BaseX、Altova RaptorXML)使用。XSLT 1.0 不支持该指令。

  • href字符串表达式,决定输出文件路径(支持相对路径、绝对路径、file:// 或其他协议 URI)
  • format(可选):引用 xsl:output 声明的 name,控制编码、缩进、DOCTYPE 等
  • validation(可选):控制是否校验输出是否符合 schema(”strict” / “lax” / “preserve” / “strip”)
  • 内容体即为该文件的输出内容(可以是任意序列:元素、文本、文档节点等)

常见使用场景示例

比如你有一份 XML 文档,包含多个

,希望每个 article 输出为单独的 HTML 文件:

                        

注意:href 中的路径支持动态构造(如用 concat()replace()position()@id),便于按数据特征命名文件。

注意事项与限制

多个 xsl:result-document 可以共存,但需确保目标 URI 不冲突;重复写入同一 URI 的行为由处理器定义(Saxon 默认覆盖,部分处理器可能报错)。

  • 不能在 xsl:template 的匹配模式中直接嵌套 xsl:result-document 作为顶层指令 —— 它必须出现在模板体内部、且不在 XPath 表达式中
  • 若需生成目录页(如 index.html),建议先用变量或临时树收集元信息,再统一生成,避免顺序依赖问题
  • 文件路径中的特殊字符(如空格、中文)应使用 encode-for-uri() 处理,例如:href="output/{encode-for-uri(@title)}.html"
  • Saxon 支持 method="xhtml" 等格式控制,但需提前定义对应 xsl:output name="xhtml"

调试与路径定位技巧

输出路径默认相对于“启动转换时的工作目录”,不是 XSLT 文件所在目录。若不确定路径效果,可先用 xsl:message 打印实际 href 值:

Writing to: 

也可用 resolve-uri(@href) 查看解析后的绝对 URI,辅助排查路径错误。

text=ZqhQzanResources