如何修复一些损坏的标签

How to fix some broken tags

我的输入中有一些损坏的标签,我想在我的 xslt 中修复这些标签。 我已经搜索并尝试了不同的东西,但我似乎无法弄清楚。

输入:

<p>Some text <span class="italic">broken </span><span class="italic">tag</span><span class="italic">s</span> in my content which is <span class="italic">really </span><span class="italic">annoying</span>.</p>

期望的输出:

<p>Some text <span class="italic">broken tags</span> in my content which is <span class="italic">really annoying</span>.</p>

有人能帮我正确的方向吗?

以下内容适用于您的示例,但对于其他情况可能不够通用。

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="p">
    <xsl:copy>
        <xsl:for-each-group select="node()" group-adjacent="string(@class)">
            <xsl:choose>
                <xsl:when test="current-grouping-key()">
                    <span class="{current-grouping-key()}"> 
                        <xsl:apply-templates select="current-group()/node()"/>
                    </span>
            </xsl:when>
            <xsl:otherwise>
                <xsl:apply-templates select="current-group()"/>
            </xsl:otherwise>  
        </xsl:choose>
    </xsl:for-each-group>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>