我使用此代码使用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标记?
答案 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">