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

技术咨询:如何使用XSLT修改XML元素名称

用XSLT修改XML元素名称的解决方案

没问题,我来帮你搞定这个需求。咱们先从核心思路说起:XSLT修改元素名称的关键是匹配目标元素,然后输出新名称的元素,并保留原元素的属性和子节点。下面结合你提供的XML示例,给你写一个可直接复用的样式表。

第一步:明确修改规则

假设你想做这些修改(你可以根据实际需求调整):

  • <PARAM> → <ConfigurationParameter>
  • <RES> → <SearchResult>
  • <M> → <MatchCount>
  • <R> → <ResultItem>
  • <U> → <OriginalUrl>
  • <UE> → <EncodedUrl>
  • <UD> → <DisplayUrl>
  • <RK> → <RelevanceScore>
  • <MT> → <Metadata>

第二步:编写XSLT样式表

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 根模板:处理整个文档,递归应用所有模板 -->
    <xsl:template match="/">
        <xsl:apply-templates/>
    </xsl:template>

    <!-- 修改<PARAM>为<ConfigurationParameter> -->
    <xsl:template match="PARAM">
        <ConfigurationParameter>
            <xsl:copy-of select="@*"/> <!-- 复制所有属性 -->
            <xsl:apply-templates/> <!-- 处理子节点(如果有的话) -->
        </ConfigurationParameter>
    </xsl:template>

    <!-- 修改<RES>为<SearchResult> -->
    <xsl:template match="RES">
        <SearchResult>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </SearchResult>
    </xsl:template>

    <!-- 修改<M>为<MatchCount> -->
    <xsl:template match="M">
        <MatchCount>
            <xsl:apply-templates/>
        </MatchCount>
    </xsl:template>

    <!-- 修改<R>为<ResultItem> -->
    <xsl:template match="R">
        <ResultItem>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </ResultItem>
    </xsl:template>

    <!-- 修改<U>为<OriginalUrl> -->
    <xsl:template match="U">
        <OriginalUrl>
            <xsl:apply-templates/>
        </OriginalUrl>
    </xsl:template>

    <!-- 修改<UE>为<EncodedUrl> -->
    <xsl:template match="UE">
        <EncodedUrl>
            <xsl:apply-templates/>
        </EncodedUrl>
    </xsl:template>

    <!-- 修改<UD>为<DisplayUrl> -->
    <xsl:template match="UD">
        <DisplayUrl>
            <xsl:apply-templates/>
        </DisplayUrl>
    </xsl:template>

    <!-- 修改<RK>为<RelevanceScore> -->
    <xsl:template match="RK">
        <RelevanceScore>
            <xsl:apply-templates/>
        </RelevanceScore>
    </xsl:template>

    <!-- 修改<MT>为<Metadata> -->
    <xsl:template match="MT">
        <Metadata>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </Metadata>
    </xsl:template>

    <!-- 通用模板:复制所有未被上面模板匹配的元素(比如<XT>),保留原样 -->
    <xsl:template match="*">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>

    <!-- 复制文本节点、注释等,避免丢失内容 -->
    <xsl:template match="text()|comment()|processing-instruction()">
        <xsl:copy/>
    </xsl:template>
</xsl:stylesheet>

第三步:转换效果展示

把你提供的输入XML(补充完整闭合标签后):

<PARAM name="ulang" value="de" original_value="de"/>
<PARAM name="wc" value="200" original_value="200"/>
<PARAM name="wc_mc" value="1" original_value="1"/>
<RES SN="1" EN="727">
    <M>727</M>
    <XT/>
    <R N="1" L="1" MIME="text/plain">
        <U>url</U>
        <UE>url</UE>
        <UD>url</UD>
        <RK>10</RK>
        <MT N="Content_Length" V="42"/>
        <MT N="url_id" V="005056A51FAC1EE0B9A3"/>
    </R>
</RES>

经过上面的XSLT转换后,得到的输出XML是:

<ConfigurationParameter name="ulang" value="de" original_value="de"/>
<ConfigurationParameter name="wc" value="200" original_value="200"/>
<ConfigurationParameter name="wc_mc" value="1" original_value="1"/>
<SearchResult SN="1" EN="727">
    <MatchCount>727</MatchCount>
    <XT/>
    <ResultItem N="1" L="1" MIME="text/plain">
        <OriginalUrl>url</OriginalUrl>
        <EncodedUrl>url</EncodedUrl>
        <DisplayUrl>url</DisplayUrl>
        <RelevanceScore>10</RelevanceScore>
        <Metadata N="Content_Length" V="42"/>
        <Metadata N="url_id" V="005056A51FAC1EE0B9A3"/>
    </ResultItem>
</SearchResult>

关键说明

  • 如果你需要修改其他元素名称,只需要新增对应的<xsl:template match="原元素名">模板,替换成新元素即可。
  • 通用模板确保了不需要修改的元素(比如<XT>)会被原样复制,不用逐个写模板。
  • <xsl:copy-of select="@*"/>负责保留原元素的所有属性,如果你只想保留部分属性,可以改成<xsl:copy-of select="@name|@value"/>这样的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:18:28