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

如何用XSLT对所有文本节点应用模板并在XML转换后去除首尾空格

用XSLT实现XML格式转换+文本首尾空格清理

针对你这种既要完成XML结构转换,又要清理所有文本元素首尾空格的需求,用XSLT来实现是最直接高效的方案——它天生就是为XML转换设计的,处理文本清理也不在话下。

核心实现思路

咱分两步走:

  • 第一步:全局处理所有文本节点,用normalize-space()函数去除首尾空格(还能顺便把中间的多空格/换行/制表符换成单个空格,要是你只想保留中间格式,后面有替代方案);
  • 第二步:按照你的目标XML结构,编写对应的节点匹配和转换规则。

完整XSLT示例代码

假设你的目标格式是把<Record>转换成<CustomerVehicle>,并调整部分字段名称(比如VehType改名为VehicleType),下面是可直接复用的代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 全局模板:处理所有文本节点,去除首尾空格 -->
    <xsl:template match="text()">
        <xsl:value-of select="normalize-space(.)"/>
    </xsl:template>

    <!-- 保留根节点并替换为目标根节点 -->
    <xsl:template match="/Records">
        <CustomerVehicles>
            <xsl:apply-templates select="Record"/>
        </CustomerVehicles>
    </xsl:template>

    <!-- 转换Record节点为CustomerVehicle结构 -->
    <xsl:template match="Record">
        <CustomerVehicle>
            <FullName>
                <!-- 自动继承文本去空格处理,拼接姓名 -->
                <xsl:value-of select="FirstName"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="MiddleName"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="LastName"/>
            </FullName>
            <VehicleType>
                <xsl:apply-templates select="VehType"/>
            </VehicleType>
            <VehicleSubType>
                <xsl:apply-templates select="VehType2"/>
            </VehicleSubType>
            <VehicleMake>
                <xsl:apply-templates select="VehMake"/>
            </VehicleMake>
            <VehicleModel>
                <xsl:apply-templates select="VehModel"/>
            </VehicleModel>
            <!-- 其他字段照着上面的格式添加即可 -->
        </CustomerVehicle>
    </xsl:template>

    <!-- 默认模板:复制未被自定义模板处理的节点/属性(可选保留) -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

关键细节调整

  1. 仅去除首尾空格(保留中间格式):
    如果你不想改动中间的多空格或换行,把文本模板换成XSLT 2.0+的replace()写法:

    <xsl:template match="text()">
        <xsl:value-of select="replace(., '^\s+|\s+$', '')"/>
    </xsl:template>
    

    用XSLT 1.0的话可以用字符串拼接技巧:

    <xsl:template match="text()">
        <xsl:value-of select="translate(normalize-space(concat(' ', ., ' ')), '  ', ' ')"/>
    </xsl:template>
    
  2. 自定义结构转换:
    你可以完全按需修改<xsl:template match="Record">里的节点结构——比如删除不需要的字段(直接不写对应的apply-templates)、新增计算字段、合并多个原字段等。

  3. 测试方式:
    你可以用本地XSLT处理器(比如Saxon、Xalan)通过命令行处理,或者用本地运行的XSLT测试工具,把输入XML和XSLT贴进去就能看到转换结果。比如输入里的<FirstName> ALICE </FirstName>,转换后会变成<FirstName>ALICE</FirstName>,完美清理首尾空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:33:42