如何将XmlTextWriter转换为字符串?

时间:2010-02-12 06:32:31

标签: .net xslt

我是XSLT Transformation世界的新手。我正在使用XSLT创建HTML文件。如何将输出作为字符串,以便我可以将其保存为HTML文件?

使用以下行执行转换:

objXtrans.Transform(objDoc, objArgLists, objXmlTxtWriter);

如何转换objXmlTxtWriter以获取通过Transform()方法生成的完整字符串,该字符串可以保存为HTML?

2 个答案:

答案 0 :(得分:1)

如果您希望转换结果是HTML文件然后转换为文件(流),则无需先在内存中组合字符串以将完整字符串写入文件。

不幸的是,您还没有真正告诉我们您使用的API,您在主题行中提到了XmlTextWriter,因此我假设它是您使用的.NET框架。从.NET 2.0开始,首选的XSLT处理器是System.Xml.Xsl.XslCompiledTransform,如果查看它的Transform method,那么它有几个重载转换为Stream,所以你可以简单地使用代码如下:

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)。

答案 1 :(得分:0)

这实际上是关于StreamTextWriter的问题,而不是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在特定情况下写入文件,但FileStreamStream,而不是TextWriter。您只能将其与Transform一起使用,因为Transform的一个重载需要Stream作为输出参数。如果您需要使用TextWriter,则该作业的工具为StreamWriter

using (StreamWriter sw = new StreamWriter(filename, append))
{
   MethodThatWritesToATextWriter(sw);
}