我是XSLT Transformation世界的新手。我正在使用XSLT创建HTML文件。如何将输出作为字符串,以便我可以将其保存为HTML文件?
使用以下行执行转换:
objXtrans.Transform(objDoc, objArgLists, objXmlTxtWriter);
如何转换objXmlTxtWriter
以获取通过Transform()
方法生成的完整字符串,该字符串可以保存为HTML?
答案 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)
这实际上是关于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);
}