我发现span
元素中继续存在多个不同的元素(例如italic
,p
)。 span
个连续元素合并为单个元素,但如何处理多个italic
个连续元素。
输入XML
<root>
<p>Paragraph <span>a</span><span>b</span><span>c</span><span>d</span> Under Continuing <span>Court</span> Jurisdiction <italic>a</italic><italic>b</italic><italic>c</italic></p>
<p>Paragraph <italic>a</italic><italic>b</italic><italic>c</italic><italic>d</italic> Under Continuing Court <span>Jurisdiction</span></p>
</root>
XSLT代码
<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=". instance of element(span), element(italic)">
<xsl:choose>
<xsl:when test="current-grouping-key()[1]">
<span>
<xsl:apply-templates select="current-group()/node()"/>
</span>
</xsl:when>
<xsl:when test="current-grouping-key()[2]">
<italic>
<xsl:apply-templates select="current-group()/node()"/>
</italic>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
预期产量
<root>
<p>Paragraph <span>abcd</span> Under Continuing <span>Court</span> Jurisdiction <italic>abc</italic></p>
<p>Paragraph <italic>abcd</italic> Under Continuing Court <span>Jurisdiction</span></p>
</root>
答案 0 :(得分:1)
您可以使用以下元素的local-name()
来更改第二个模板:
<xsl:template match="p">
<xsl:copy>
<xsl:for-each-group select="node()" group-adjacent="local-name()='span' or local-name()='italic'">
<xsl:choose>
<xsl:when test="current-grouping-key()">
<xsl:copy>
<xsl:apply-templates select="current-group()/node()"/>
</xsl:copy>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
输出为
<root>
<p>
Paragraph <span>abcd</span>
Under Continuing <span>Court</span>
Jurisdiction <italic>abc</italic>
</p>
<p>
Paragraph <italic>abcd</italic>
Under Continuing Court <span>Jurisdiction</span>
</p>
</root>
输出的格式可能不同。