采取以下方法作为基础:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="bo[.//bo]">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="boo[not(boo)]">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
如果这还不够,那么您需要更详细地解释您可以拥有哪些输入变体以及您希望如何转换它们。
使用上述模板的完整样式表是
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="bo[.//bo]">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="boo[not(boo)]">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
</xsl:stylesheet>
和变换
<body>
<bo>
<bo>some text</bo>
<bo>
<bo>some other text</bo>
</bo>
<bo>more text</bo>
</bo>
<bo>
<fig/>
</bo>
</body>
进入
<body>
<bo>some text</bo>
<bo>some other text</bo>
<bo>more text</bo>
<bo>
<fig/>
</bo>
</body>