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

时间:2010-12-10 12:15:26

标签: .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();

我的模板如下所示:

<?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>...

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

4 个答案:

答案 0 :(得分:5)

简短回答

使用

<xsl:output method="xml"/>

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

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

在XSLT 2.0中,可以使用

<xsl:output method="xhtml"/>

答案 1 :(得分:4)

输出方法的XSLT 1.0规范=“html”(http://www.w3.org/TR/xslt#section-HTML-Output-Method)要求在有头部的情况下输出元元素在结果树中:

  

如果有一个HEAD元素,那么   html输出法应该添加一个META   紧接着之后的元素   HEAD元素的start-tag   指定字符编码   实际使用过。

因此XslCompiledTransform执行XSLT处理器应该执行的操作。如果你不想要meta元素,你需要更详细地解释你想要什么样的输出,或者如果你想要html输出,为什么meta是个问题。你当然可以使用output method =“xml”,这样你就不会得到元元素,但是我不确定序列化结果会像你想要的'br'元素节点那样。

答案 2 :(得分:1)

它还取决于您从输出标记插入的doctype。例如,使用XHTML省略了META标记。<​​/ p>

   <xsl:output method="html"
               doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
               doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>

答案 3 :(得分:0)

如果你想要html输出而不添加MATE标签,只需在html标签中添加一个xml命名空间 像这样

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">