0

0

如何用XSLT合并多个XML文件 document()函数

畫卷琴夢

畫卷琴夢

发布时间:2025-12-19 16:23:27

|

768人浏览过

|

来源于php中文网

原创

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

如何用xslt合并多个xml文件 document()函数

用 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.xmlorders.xml,你想生成一份“用户+订单详情”的汇总报告。

users.xml:

<users>
  <user id="u1"><name>Alice</name></user>
  <user id="u2"><name>Bob</name></user>
</users>

orders.xml:

<orders>
  <order userid="u1"><item>Book</item></order>
  <order userid="u1"><item>Pen</item></order>
</orders>

在主 XSLT 中,可这样关联数据:

Otter.ai
Otter.ai

一个自动的会议记录和笔记工具,会议内容生成和实时转录

下载
<xsl:variable name="orders" select="document('orders.xml')/orders/order" />
<xsl:for-each select="users/user">
  <user-report>
    <name><xsl:value-of select="name"/></name>
    <orders>
      <xsl:for-each select="$orders[@userid = current()/@id]">
        <item><xsl:value-of select="item"/></item>
      </xsl:for-each>
    </orders>
  </user-report>
</xsl:for-each>

注意事项与常见问题

document() 行为受处理器支持和安全策略影响,需注意以下几点:

  • 路径是相对于 调用时的样式表位置,不是输入 XML 的位置(除非显式传入基准节点)
  • 多数处理器默认禁止访问本地文件系统以外的资源(如 HTTP URL),需配置白名单或启用相应选项
  • XSLT 1.0 不支持直接传入字符串序列(如 ('a.xml','b.xml')),需用循环或递归方式逐个加载
  • 若文件不存在或格式错误,document() 返回空节点集,不会报错——建议用 count($doc/*)$doc/node() 检查是否加载成功

进阶技巧:动态文件名与参数化合并

可通过 xsl:param 传入文件路径,让合并逻辑更灵活:

<xsl:param name="orderFile" select="'orders.xml'" />
<xsl:variable name="orders" select="document($orderFile)/orders/order" />

配合命令行工具(如 Saxon、xsltproc),可运行时注入参数:

saxon -s:users.xml -xsl:merge.xsl -param orderFile="prod_orders.xml"

这样同一份 XSLT 就能适配不同环境的数据源。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

203

2023.11.20

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1949

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2119

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1171

2024.11.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1569

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

651

2023.11.24

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 7.3万人学习

前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 21.8万人学习

第二十二期_前端开发
第二十二期_前端开发

共119课时 | 13.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号