You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT分组问题:如何按<div><head>拆分TEI XML文件?

TEI XML子章节拆分独立文件的XSLT 3.0实现

问题分析

你当前的XSLT仅生成纯文本<div class="test">,核心问题是没正确保留原XML节点结构,也未启用XSLT 3.0的多文件输出能力。

解决方案代码

以下是完整的XSLT 3.0脚本,可自动将每个<div>子章节拆分为独立文件,同时完整保留原标签结构:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0">
    <!-- 保留原XML命名空间,输出格式化XML -->
    <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
    
    <!-- 匹配根节点,遍历所有带<head>的<div>子章节 -->
    <xsl:template match="/">
        <xsl:for-each select="//div[head]">
            <!-- 用<head>文本生成文件名,替换空格为下划线避免路径问题 -->
            <xsl:variable name="filename" select="concat(translate(head, ' ', '_'), '.xml')"/>
            
            <!-- 生成独立输出文件 -->
            <xsl:result-document href="{$filename}">
                <!-- 完整复制当前<div>的所有节点及结构 -->
                <xsl:copy-of select="."/>
            </xsl:result-document>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

关键说明

  • 保留标签结构:用<xsl:copy-of select="."/>替代文本提取函数,完整复制目标<div>的所有子节点和标签。
  • 多文件输出:依赖XSLT 3.0的<xsl:result-document>元素,需确保使用支持该特性的处理器(如Saxon-HE 9.8及以上版本)。
  • 文件名规则:示例用<head>文本替换空格为下划线作为文件名,可根据需求修改$filename的生成逻辑(比如添加序号、前缀)。
  • 命名空间适配:如果你的TEI文档带有命名空间,需在XSLT中声明对应前缀(如示例中的tei:),避免节点匹配失败。

常见问题修正

如果之前的代码使用了<xsl:value-of>,会仅提取文本,替换为<xsl:copy-of>即可保留结构;若处理器不支持XSLT 3.0,需升级到兼容工具。

内容的提问来源于stack exchange,提问作者KWunsch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:30:56