我是XSLT转换领域的新手。我正在使用XSLT创建一个HTML文件。如何获得字符串形式的输出,以便将其保存为HTML文件?
使用下面的代码行执行转换:
objXtrans.Transform(objDoc, objArgLists, objXmlTxtWriter);如何转换objXmlTxtWriter以获得通过Transform()方法生成的完整字符串,该字符串可以保存为HTML?
发布于 2010-02-12 19:38:49
如果您希望转换结果为HTML文件,然后转换为文件(流),则不需要首先在内存中组装字符串以将完整的字符串写入文件。
不幸的是,您并没有真正告诉我们您使用的是哪种应用程序接口,您在主题行中提到了XmlTextWriter,所以我假设它就是您使用的.NET框架。自XSLT2.0以来,首选的.NET处理器是System.Xml.Xsl.XslCompiledTransform,如果您查看它的Transform method,那么它有几个重载转换为流,因此您可以简单地使用以下代码:
XslCompiledTransform proc = new XslCompiledTransform();
proc.Load("sheet.xsl");
using (FileStream stream = File.OpenWrite("result.html"))
{
proc.Transform(someInput, someArgumentList, stream);
}第一个参数有很多选项,它可以是带有输入文件名或URI的字符串,可以是XmlReader,也可以是实现IXPathNavigable的对象(如XmlDocument或XPathDocument)。
发布于 2010-02-14 01:32:10
这实际上是一个关于Stream和TextWriter的问题,而不是关于XML。所有关于.NET的XSLT工具的文档都假设您已经知道如何在.NET中进行基于流和基于文本的IO,如果您不知道,您可能会做很多不必要的工作。(“你”指的是“我”,“可能”指的是“做过”。)
虽然Martin Honnen正确地观察到,在您的示例中,实际上不需要将输出转换为字符串,但以下是如何做到这一点。请注意,这适用于写入TextWriter的任何方法,而不仅仅是XslCompiledTransform.Transform()
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
{
MethodThatWritesToATextWriter(sw);
}
string s = sb.ToString();尽管您可以在特定情况下使用FileStream写入文件,但FileStream是Stream,而不是TextWriter。您只能将其与Transform一起使用,因为Transform的一个重载将Stream作为输出参数。如果需要使用TextWriter,则作业工具为StreamWriter
using (StreamWriter sw = new StreamWriter(filename, append))
{
MethodThatWritesToATextWriter(sw);
}https://stackoverflow.com/questions/2250061
复制相似问题