什么 XSLT 处理器?XSLT 只是一种转换 xml 的语言,因此“html 输出”取决于处理器。
我猜这第一个解决方案对你来说太简单了,但我不得不使用它来避免处理原始 html
<xsl:copy-of select="child::node()" />
因为这应该克隆原始输入。就我而言,我使用以下内容提取具有 raw 属性的所有节点:
<xsl:for-each select="xmlData//node()[@raw]">
<xsl:copy-of select="child::node()" />
</xsl:for-each>
其他选项:
2) 为每个空节点添加一个属性,具体取决于您希望它稍后执行的操作,即role="long"、role="short-hand"。
3)循环遍历每个节点(xsl:for-each)
<xsl:choose>
<xsl:when test="string-length(.)=0"> <!-- There is no child-->
<xsl:copy-of select="node()" />
</xsl:when>
<xsl:otherwise>
...whatever normal processing you have
</xsl:otherwise>
4)重新定义你的问题。两者都是有效的 XHTML/XML,所以也许您的问题可以在其他地方重新构建或修复。
无论哪种方式,您都可能希望在您的问题中添加更多信息,以便我们可以重现您的问题并在本地进行测试。
PS 太多的文本/代码无法发表评论,但这就是它应该属于的地方。