XSLT 合并多个 XML 文件的核心是 document() 函数,它支持加载外部文档并访问其节点,可用于跨文件数据整合;基本用法包括单文件加载、多文件加载(XSLT 2.0+)及指定基准节点解析路径。
用 XSLT 合并多个 XML 文件,核心是 document() 函数。它允许你在当前样式表中加载并访问外部 XML 文档的节点,从而实现跨文件的数据读取与整合。
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 中,可这样关联数据:
document() 行为受处理器支持和安全策略影响,需注意以下几点:
调用时的样式表位置,不是输入 XML 的位置(除非显式传入基准节点)('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 就能适配不同环境的数据源。