XSLT 合并多个 XML 文件的核心是 document() 函数,它支持加载外部文档并访问其节点,可用于跨文件数据整合;基本用法包括单文件加载、多文件加载(XSLT 2.0+)及指定基准节点解析路径。

用 XSLT 合并多个 XML 文件,核心是 document() 函数。它允许你在当前样式表中加载并访问外部 XML 文档的节点,从而实现跨文件的数据读取与整合。
document() 函数的基本用法
document() 是 XSLT 内置函数,支持单个或多个 URI 参数。最常见的是传入一个字符串路径(相对或绝对),返回对应 XML 文档的根节点;也可传入节点集,对每个节点计算其 base URI 并加载对应文档。
- 简单加载:
document('data1.xml')—— 加载同目录下的data1.xml - 加载多个:
document(('a.xml', 'b.xml', 'c.xml'))—— 返回三个文档的根节点组成的节点集(XSLT 2.0+) - 带上下文解析:
document('config.xml', /)—— 显式指定基准节点(避免因当前上下文影响路径解析)
合并多个文件的典型场景示例
假设有两个文件:users.xml 和 orders.xml,你想生成一份“用户+订单详情”的汇总报告。
users.xml:
orders.xml:
在主 XSLT 中,可这样关联数据:
特色介绍: 1、ASP+XML+XSLT开发,代码、界面、样式全分离,可快速开发 2、支持语言包,支持多模板,ASP文件中无任何HTML or 中文 3、无限级分类,无限级菜单,自由排序 4、自定义版头(用于不规则页面) 5、自动查找无用的上传文件与空目录,并有回收站,可删除、还原、永久删除 6、增强的Cache管理,可单独管理单个Cache 7、以内存和XML做为Cache,兼顾性能与消耗 8、
注意事项与常见问题
document() 行为受处理器支持和安全策略影响,需注意以下几点:
- 路径是相对于 调用时的样式表位置,不是输入 XML 的位置(除非显式传入基准节点)
- 多数处理器默认禁止访问本地文件系统以外的资源(如 HTTP URL),需配置白名单或启用相应选项
- XSLT 1.0 不支持直接传入字符串序列(如
('a.xml','b.xml')),需用循环或递归方式逐个加载 - 若文件不存在或格式错误,
document()返回空节点集,不会报错——建议用count($doc/*)或$doc/node()检查是否加载成功
进阶技巧:动态文件名与参数化合并
可通过 xsl:param 传入文件路径,让合并逻辑更灵活:
配合命令行工具(如 Saxon、xsltproc),可运行时注入参数:
saxon -s:users.xml -xsl:merge.xsl -param orderFile="prod_orders.xml"这样同一份 XSLT 就能适配不同环境的数据源。









