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

如何使用XSLT按顺序解析嵌套标签并去除元素属性(第二部分)

解决方案:移除<p>标签的Status属性

没问题,我帮你搞定这个小问题!核心原因是你当前处理BodyText的模板里,同时对属性和节点应用了模板——默认的属性复制模板会把BodyText的Status属性直接带到新生成的<p>标签上。只需要做一处简单修改就能解决:

修改后的完整XSLT代码

<!-- ********* 基础复制模板 ************************************************************************************************** -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<!-- ********* BodyText 转换模板 ************************************************************************************************** -->
<xsl:template match="BodyText">
    <p>
        <!-- 只处理节点内容,不再处理BodyText的属性 -->
        <xsl:apply-templates select="node()"/>
    </p>
</xsl:template>

<!-- ********* Emphasis 样式转换模板 ***** bold, italic, underline, Default bold **************************************************** -->
<xsl:template match="Emphasis[@type='bold']">
    <b>
        <xsl:apply-templates select="node()"/>
    </b>
</xsl:template>
<xsl:template match="Emphasis[@type='italic']">
    <i>
        <xsl:apply-templates select="node()"/>
    </i>
</xsl:template>
<xsl:template match="Emphasis[@type='underline']">
    <u>
        <xsl:apply-templates select="node()"/>
    </u>
</xsl:template>
<xsl:template match="Emphasis">
    <b>
        <xsl:apply-templates select="node()"/>
    </b>
</xsl:template>

效果验证

修改后,你的源XML会被转换为符合要求的结果:

<p>Lorem ipsum dolor <b>THIS IS BOLD</b> amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. </p>

<p>标签不再带有不符合Schema的Status属性,同时Emphasis标签的样式转换逻辑完全保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:22:19