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

如何使用XSLT根据元素属性值转换XML元素名称?

解决方案

以下是修正后的XSLT代码,可实现你需要的转换效果:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:L7j="http://ns.l7tech.com/2012/08/jdbc-query-result">
    <xsl:output method="xml" indent="yes"/>

    <!-- 身份模板:默认复制所有节点 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 针对L7j:col元素的自定义转换 -->
    <xsl:template match="L7j:col">
        <xsl:element name="{@name}">
            <xsl:value-of select="."/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

关键修正说明:

  1. 修复命名空间不匹配:原XSLT中使用的https://ns.l7tech.com/2012/08/jdbc-query-result与XML输入中的http://...命名空间不一致,修正为相同值确保元素能被正确匹配。
  2. 替换L7j:col元素:新增专门模板匹配<L7j:col>,将其替换为名称取自name属性的新元素,仅保留原元素的文本内容,忽略type等其他无关属性。
  3. 保留原有结构:通过身份模板自动复制未被自定义模板匹配的节点(如<L7j:jdbcQueryResult>和<L7j:row>),维持原XML的整体层级结构。

转换后输出:

<?xml version="1.0" encoding="UTF-8"?>
<L7j:jdbcQueryResult xmlns:L7j="http://ns.l7tech.com/2012/08/jdbc-query-result">
    <L7j:row>
        <firstname>Stefan</firstname>
        <lastname>McLovin</lastname>
        <age>21</age>
        <year>3</year>
        <id>0001</id>
    </L7j:row>
    <L7j:row>
        <firstname>Kevin</firstname>
        <lastname>McCool</lastname>
        <age>25</age>
        <year>4</year>
        <id>0002</id>
    </L7j:row>
</L7j:jdbcQueryResult>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:14:59