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

如何通过XSLT修改XML的g父元素名称以包含指定子元素文本?

解决方案

没问题,我来帮你搞定第二个需求!只需要在现有XSLT中添加一个专门处理<g>元素的模板,覆盖默认的identity模板行为即可。下面是修改后的完整样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
 <!-- 保留默认的identity模板,用于复制未被专门模板匹配的节点 -->
 <xsl:template match="@* | node()">
  <xsl:copy>
   <xsl:apply-templates select="@* | node()" />
  </xsl:copy>
 </xsl:template>

 <xsl:variable name="lowerCase" select="'abcdefghijklmnopqrstuvwxyz'" />
 <xsl:variable name="upperCase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />

 <!-- 新增:处理<g>元素的模板,重命名为g+A/B列的文本 -->
 <xsl:template match="g">
  <xsl:element name="g{column[@name='A/B']}">
   <xsl:apply-templates select="node()" />
  </xsl:element>
 </xsl:template>

 <!-- 保留原有处理<column>的模板,转换name属性为元素名 -->
 <xsl:template match="column">
  <xsl:element name="{translate(translate(@name,'/','_'), $upperCase,$lowerCase)}">
   <xsl:apply-templates />
  </xsl:element>
 </xsl:template>
</xsl:stylesheet>

关键改动说明:

  • 新增<g>元素处理模板:
    • 使用<xsl:element>动态生成新元素名,规则是g拼接当前<g>子节点中name="A/B"的<column>元素的文本内容(比如Test_1就会生成gTest_1)
    • 通过<xsl:apply-templates select="node()" />继续处理<g>内部的子节点(也就是原来的<column>元素,走已有的转换逻辑)
  • 原有<column>的转换逻辑完全保留,确保name="A/B"转成<a_b>、name="C/D"转成<c_d>的功能正常

验证效果:

用这个样式表处理你的原始XML,会生成你期望的输出:

<?xml version='1.0' encoding='UTF-8'?>
<c version="0.1">
 <f>
  <gTest_1>
   <a_b>Test_1</a_b>
   <c_d>NA</c_d>
  </gTest_1>
  <gTest_2>
   <a_b>Test_2</a_b>
  </gTest_2>
  <gTest_3>
   <a_b>Test_3</a_b>
  </gTest_3>
 </f>
</c>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:55:16