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

使用XSL转换移除XML中region元素的regionTitleFriendly属性

解决XSL移除region元素regionTitleFriendly属性的问题

你的代码无法正常工作主要有几个核心问题:

  • 没有重建<sc:region>元素,直接输出<xsl:attribute>会导致属性脱离所属元素,生成的XML结构完全错误。
  • 属性模板里的<br />是无效语法,XSL属性值中不能包含HTML标签,会直接破坏XML格式。
  • 手动复制id和type属性的方式既冗余又不灵活,一旦<sc:region>有其他属性会直接丢失。

最简单的解决方案

如果要移除所有<sc:region>元素的xt:regionTitleFriendly属性,只需要配合XSL身份模板添加一个空匹配模板即可:

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

<!-- 匹配要移除的属性,空模板表示不输出该属性 -->
<xsl:template match="sc:region/@xt:regionTitleFriendly"/>

仅移除属性值为'Region Title'的情况

如果你只想移除属性值等于Region Title的xt:regionTitleFriendly,修改匹配规则即可:

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="sc:region/@xt:regionTitleFriendly[.='Region Title']"/>

自定义元素场景的写法

如果你需要对<sc:region>元素做更多自定义处理,也可以手动复制元素和除目标属性外的所有属性:

<xsl:template match="sc:region">
  <xsl:copy>
    <!-- 复制所有属性,排除xt:regionTitleFriendly -->
    <xsl:apply-templates select="@*[not(self::xt:regionTitleFriendly)]"/>
    <!-- 处理子节点 -->
    <xsl:apply-templates select="node()"/>
  </xsl:copy>
</xsl:template>

<!-- 身份模板不能省略,否则其他节点无法被正常复制 -->
<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

注意:确保你的XSL文件中已经正确声明了sc和xt对应的命名空间,比如在<xsl:stylesheet>标签里添加类似xmlns:sc="http://your-sc-namespace"和xmlns:xt="http://your-xt-namespace"的声明,否则节点匹配会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:39:28