你好?别人会编辑吗?...好吧,我需要“100% 解决方案”,我正在添加一个,仅用于精细,但不是“我的”。
@MichaelKay 和@DanielHaley 展示了很好的线索并且接近了精细的解决方案(!)。
XML 输入
<html>
<p><i>Several more</i> Homo sapiens <i>fossils were discovered</i>.</p>
<p>Several more <i>Homo sapiens</i> fossils were discovered.</p>
<p>Leave me alone!</p>
<p><b><i>F</i>RAGMENT <big><i>with italics</i> and </big> withOUT</b></p>
<p><i><sup><sub><sup><sub>Deep tags</sub></sup></sub></sup> here</i>
<big><b><small>and here</small></b></big>!
</p>
</html>
XSLT 1.0 实现
@DanielHaley 显示更好的结果(只有<p>Leave me alone!</p>
不倒置),但@MichaelKay 的解决方案更优雅:我将两者合并以产生这个“100% 解决方案”。现在我在我的系统上使用这个 XSLT 作为“交换斜体算法”......直到现在没有错误(!)。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:preserve-space elements="p"/>
<xsl:template match="@*|node()"> <!-- copy all -->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="i"> <!-- remove tag i -->
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text()[not(ancestor::i)]"> <!-- inlcude tag i -->
<i><xsl:copy-of select="."/></i>
</xsl:template>
</xsl:stylesheet>
在复制过程中概述为“事件驱动算法”: