转换后如何防止自闭标签以及空标签

时间:2012-12-19 16:38:45

标签: xslt tags

我有一个输入文件:

<a></a>
<b/>
<c>text</c>

我需要将其转换为字符串。使用变压器我得到低于输出:

<a/> <!-- Empty tags should not collapse-->
<b/>
<c>text</c>

如果我使用xslt并且输出方法是“HTML”,我得到以下输出:

<a></a> <!-- This is as expected-->
<b></b> <!-- This is not expected-->
<c>text</c>

我希望结构与输入文件相同。在我的应用程序中需要它,因为我需要计算索引,并且很难更改索引计算逻辑。

使用正确的XSLT是什么?

2 个答案:

答案 0 :(得分:0)

什么是XSLT处理器? XSLT只是一种转换xml的语言,所以&#34; html输出&#34;取决于处理器。

我猜这个第一个解决方案对你来说太简单了,但我不得不用它来避免处理原始的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 =&#34; long&#34;,role =&#34; short-hand&#34;。

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,所以也许你的问题可以在其他地方重新定义或修复。

无论哪种方式,您可能希望在问题中添加更多信息,以便我们可以重现您的问题并在本地进行测试。

P.S。要放置评论的文字/代码太多,但这就属于这个。

答案 1 :(得分:0)

可能的替代方法是使用disable-output-escaping,如下所示:

<xsl:text disable-output-escaping="yes">&lt;a&gt;&lt;/a&gt;</xsl:text>

但我明白这是一个肮脏的解决方案......