我试图通过 XslCompiledTransform 将 XML 文件转换为 HTML 文件(然后最终转换为 pdf),但是最终结果不会显示在浏览器中,似乎是因为它正在添加一个文件开头的额外
private void GenerateHtmlBtn_Click(object sender, EventArgs e)
{
// Getting file path
string strXSLTFile = "Z:\\Database\\Report.xslt";
string strXMLFile = "Z:\\Database\\Export.xml";
// Creating XSLCompiled object
XslCompiledTransform objXSLTransform = new XslCompiledTransform();
objXSLTransform.Load(strXSLTFile);
// Creating StringBuilder object to hold html data and creates TextWriter object to hold data from XslCompiled.Transform method
StringBuilder htmlOutput = new StringBuilder();
TextWriter htmlWriter = new StringWriter(htmlOutput);
// Creating XmlReader object to read XML content
XmlReader reader = XmlReader.Create(strXMLFile);
// Call Transform() method to create html string and write in TextWriter object.
objXSLTransform.Transform(reader, null, htmlWriter);
textBox2.Text = htmlWriter.ToString();
using (FileStream fs = new FileStream("Z:\\Database\\Export.html", FileMode.Create))
{
XmlSerializer ser = new XmlSerializer(typeof(string));
ser.Serialize(fs, htmlOutput.ToString());
}
// Closing xmlreader object
reader.Close();
}
这是 XSLT 文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">
<xsl:for-each select="ArrayOfPerson">
<xsl:for-each select="Person">
<div style="background-color:gray;color:white;padding:4px">
<span style="font-weight:bold">
Name: <xsl:value-of select="Name"/>
</span>
- Id: <xsl:value-of select="id"/>
</div>
<div style="margin-left:20px;margin-bottom:1em;font-size:10pt">
<span style="font-style:italic">
Current Value: <xsl:value-of select="CurrentValue"/>
</span>
<span style="font-style:italic">
Simulated Value: <xsl:value-of select="SimulatedValue"/>
</span>
</div>
</xsl:for-each>
</xsl:for-each>
</body>
</html>
最后是最终结果:
<?xml version="1.0"?>
<string><?xml version="1.0" encoding="utf-16"?><html xmlns="http://www.w3.org/1999/xhtml"><body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE"><div style="background-color:gray;color:white;padding:4px"><span style="font-weight:bold">
Name: Full Test3</span>
- Id: 3344558</div><div style="margin-left:20px;margin-bottom:1em;font-size:10pt"><span style="font-style:italic">
Current EFC: 1500</span><span style="font-style:italic">
Simulated EFC: 7</span></div></body></html></string>
非常感谢任何帮助!!
答案 0 :(得分:0)
正如评论之一提到的,不要使用 XmlSerializer 输出文件。我删除了那部分并尝试指定一个输出文件,但输出(在解决额外的标签症状时)其中没有任何 HTML 或 XML 输出(只有从 XML 输入的值)。最终我使用了以下答案:White space cannot be stripped from input documents that have already been loaded. Provide the input document as an XmlReader instead
感谢大家的帮助!
答案 1 :(得分:-1)
XSLT 文件完全倾斜。
为了从输出中消除 XML prolog 声明,以下子句应在 XSLT 中:
omit-xml-declaration="yes"
附加说明:
method="html"
。XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
...
</xsl:stylesheet>