7

我正在使用XslCompiledTransform将 XML 文件转换为 HTML。有没有办法阻止它使用自闭合标签。

例如

<span></span> <!-- I want this even if content empty -->
<span/> <!-- stop doing this! ->

无论我使用哪种浏览器,span 上的自关闭标签都会弄乱我的文档,尽管它是有效的 XML,只是不允许 'span' 有自关闭标签。

是否可以在我的 xsl 或 C#.Net 代码中设置一个设置来防止使用自闭合标签?

4

4 回答 4

2

虽然我无法将其归类为直接解决方案(因为它不会发出空元素),但我使用的解决方法是在元素中放置一个空格(使用 xsl:text)——因为这是 HTML 标记,并且如果您正在激活标准模式(不是怪癖),额外的空间不会改变呈现的内容。我也无法控制转换对象的调用。

<div class="clearBoth"><xsl:text> </xsl:text></div>
于 2011-11-13T21:52:34.907 回答
0

我能找到的唯一解决方案是将逻辑添加到 XSL 文件中。基本上,如果我想包裹 span 的元素是空的,则根本不要使用 span 元素。

<xsl:if test="count(jar/beans) > 0">
   <xsl:apply-templates select="jar/beans"/>
</xsl:if>

不理想必须在我的 xsl 文件中的任何地方插入它,以弥补即使我选择输出方法“html”,它也很乐意生成非法 HTML 的事实。

叹。

于 2011-08-25T13:45:13.570 回答
0

在您的 XSLT 使用<xsl:output method="html"/>中,然后确保您的样式表创建的 HTML 结果元素不在命名空间中。此外,根据您在 C# 代码中使用 XslCompiledTransform 的方式,您需要确保xsl:output样式表中的设置得到遵守。您可以通过转换为文件或流或 TextWriter 轻松实现此目的,在这种情况下无需执行任何操作。但是,如果您出于某些原因转换为 XmlWriter,那么您需要确保它是使用正确的设置创建的,例如

XslCompiledTransform proc = new XslCompiledTransform();
proc.Load("sheet.xsl");

using (XmlWriter xw = XmlWriter.Create("result.html", proc.OutputSettings))
{
  proc.Transform("input.xml", null, xw);
}

但通常只需转换为 Stream 或 TextWriter 就可以了,在这种情况下,无需在 C# 代码中执行任何操作来尊重样式表中的输出方法。

于 2011-08-23T09:54:16.357 回答
0

您可以尝试<xsl:output method="html"/>但是结果将不再是格式良好的 XML 文档。

或者,您可以调用XslCompiledTransform.Transform()方法作为参数之一传递您自己的XmlWriter。在您的实现中,您可以完全控制并且可以实现任何所需的结果树序列化。

于 2011-08-23T04:18:17.630 回答