如何修复一些损坏的标签
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>
我的输入中有一些损坏的标签,我想在我的 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>