Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用XmlDocument将XML转换为有效的HTML_C#_Xml_Xslt - Fatal编程技术网

C# 使用XmlDocument将XML转换为有效的HTML

C# 使用XmlDocument将XML转换为有效的HTML,c#,xml,xslt,C#,Xml,Xslt,我想将XML和XSL转换为有效的HTML。源和目标是XML文档 我有以下代码: public static XmlDocument XslTransformation(XslCompiledTransform xslt, XmlDocument input) { XmlDocument target = new XmlDocument(); using (var writer = XmlWriter.Create(target.CreateNavigator().AppendC

我想将XML和XSL转换为有效的HTML。源和目标是XML文档

我有以下代码:

public static XmlDocument XslTransformation(XslCompiledTransform xslt, XmlDocument input)
{
    XmlDocument target = new XmlDocument();

    using (var writer = XmlWriter.Create(target.CreateNavigator().AppendChild(), xslt.OutputSettings))
    {
        xslt.Transform(input, writer);
    }

    return target;
}
在XSL中,我们设置输出方法:

<xsl:output method="html" version="1.0" encoding="iso-8859-1" indent="yes" omit-xml-declaration="no"/>

但结果不是有效的HTML。比如说

<script src="blah.js"></script>

转换为

<script src="blah.js" />

我检查了XSLT OutputSettings的OutputMethod,它被设置为“Html”


我发现了许多相关的问题和公认的答案,但我不明白为什么我仍然会得到自动关闭标签。

那么,您创建了一个
XmlDocument
,那么您期望得到什么呢?它将包含一个节点树,而不是一个序列化,在输出设置很重要的地方,我想当你序列化/保存你的
XmlDocument
时,你会神奇地期待它变成某种HTML文档,但事实并非如此。如果您想要HTML输出,那么使用File/Stream/TextWriter作为您创建的结果。或者,在保存目标文档的地方,确保使用XmlWriter保存输出设置。我假设Transform()方法将HTML提供给我,因为XmlDocument可以包含有效的HTML。最初的实现是分阶段处理数据,首先转换为HTML,然后使用TextWriter检索回来。然后它被再次读取到XmlDocument以进行更多的处理,然后它取出作为下一个XmlDocument输入的OuterXml,并重复这个循环,直到文档准备就绪。这产生了正确的HTML,但我想简化处理,并在整个过程中使用一个XmlDocument。在最后一步之后,我尝试了TextWriter,也许它会有所帮助。使用TextWriter取出最终文档,我会得到格式正确的HTML。