为什么XslCompiledTransform将META标记添加到HTML输出?

jlp*_*jlp 4 .net xslt

我使用此代码使用XSLT模板将XML转换为HTML:

string uri = Server.MapPath("~/template.xslt");
XslCompiledTransform xsl = new XslCompiledTransform();
xsl.Load(uri);
XDocument xml = new XDocument(new XElement("Root"));
StringBuilder builder = new StringBuilder();
XmlReader reader = xml.CreateReader();
XmlWriter writer = XmlWriter.Create(builder, xsl.OutputSettings);
xsl.Transform(reader, writer);
writer.Close();
Run Code Online (Sandbox Code Playgroud)

我的模板看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes"  />
<xsl:template match="Root">
    <html>
       <head>...
Run Code Online (Sandbox Code Playgroud)

输出正确但它包含META标记.如何禁用转换,以便它不会生成META标记?

Dim*_*hev 5

简短回答:

用途:

<xsl:output method="xml"/>
Run Code Online (Sandbox Code Playgroud)

这消除了任何添加的HTML标记<meta>.

与此同时,您可能难以实现某些元素的确切需要词汇表示.

在XSLT 2.0中,可以使用:

<xsl:output method="xhtml"/>
Run Code Online (Sandbox Code Playgroud)


Mar*_*nen 4

输出 method="html" 的 XSLT 1.0 规范 (http://www.w3.org/TR/xslt#section-HTML-Output-Method) 要求如果结果中有 head 部分,则输出元元素树:

如果存在 HEAD 元素,则 html 输出方法应在 HEAD 元素的开始标记后立即添加一个 META 元素,指定实际使用的字符编码。

因此,XslCompiledTransform 执行 XSLT 处理器应执行的操作。如果您不想要 meta 元素,您将需要更详细地解释您到底想要什么样的输出,或者如果您想要 html 输出,为什么 meta 是一个问题。您当然可以使用输出方法=“xml”,这样您就不会获得元元素,但我不确定这种方式的序列化结果是否是您想要的“br”元素节点之类的东西。

  • Meta 是一个问题,因为在 html 输出中没有结束标记。我想 XHTML 会有正确关闭的标签。 (2认同)