F# 从 XML 字符串和 returns 字符串执行 XSL 转换
F# execute XSL Transform from XML String and returns string
查看 .NET 中的 XSLCompiledTransform Class 试图找到一种在 F# 中使用它的简洁方法。我不熟悉 string readers/writers 但我将其视为实现此目的的主要方法。还是我想要 XML 个读者?
我有一个接受两个参数的函数 - XML 字符串和 XSLT 样式表。我要return一串XML.
let applyXSLTransform xml xslFile =
let xslt = XslCompiledTransform()
xslt.Load(xslFile)
xslt.Transform(xml, outputToString); //This bit
处理文件很好也很容易,但读写字符串似乎有点复杂。我看过一些 C# 示例,但没有立即成功地让它们工作,所以仍在对读者和作者进行研究!
干杯
我认为使用 API 没有比使用 XmlReader
和 XmlWriter
界面更简单的方法了。不幸的是,这非常乏味,但以下应该可以解决问题:
open System.IO
open System.Text
open System.Xml
open System.Xml.Xsl
let applyXSLTransform xml (xslFile:string) =
let xslt = XslCompiledTransform()
let sbuilder = StringBuilder()
use swriter = new StringWriter(sbuilder)
use sreader = new StringReader(xml)
use xreader = new XmlTextReader(sreader)
use xwriter = new XmlTextWriter(swriter)
xslt.Load(xslFile)
xslt.Transform(xreader, xwriter)
sbuilder.ToString()
代码构造了StringBuilder
,这是一个用于构造字符串的内存对象。它将此包装在 StringWriter
和 XmlTextWriter
周围以传递给 Transform
方法。最后,您使用 ToString
方法读取 StringBuilder
的内容。类似的事情发生在为来自 StringReader
的数据创建 XmlTextReader
时,其中包含您的输入 XML.
这是我能想出的,尝试使用推荐的 XmlReader.Create
工厂方法而不是 .NET 1 遗留的 XmlTextReader:
open System
open System.Xml.Xsl
open System.Xml
open System.IO
let transform xml xslt =
let processor = XslCompiledTransform()
use xsltreader = XmlReader.Create(new StringReader(xslt))
processor.Load(xsltreader)
use xmlreader = XmlReader.Create(new StringReader(xml))
use resultwriter = new StringWriter()
processor.Transform(xmlreader, null, resultwriter)
resultwriter.ToString()
但是我对F#没有很深的了解,只是想把我的C#编码方式转换成F#。
查看 .NET 中的 XSLCompiledTransform Class 试图找到一种在 F# 中使用它的简洁方法。我不熟悉 string readers/writers 但我将其视为实现此目的的主要方法。还是我想要 XML 个读者?
我有一个接受两个参数的函数 - XML 字符串和 XSLT 样式表。我要return一串XML.
let applyXSLTransform xml xslFile =
let xslt = XslCompiledTransform()
xslt.Load(xslFile)
xslt.Transform(xml, outputToString); //This bit
处理文件很好也很容易,但读写字符串似乎有点复杂。我看过一些 C# 示例,但没有立即成功地让它们工作,所以仍在对读者和作者进行研究!
干杯
我认为使用 API 没有比使用 XmlReader
和 XmlWriter
界面更简单的方法了。不幸的是,这非常乏味,但以下应该可以解决问题:
open System.IO
open System.Text
open System.Xml
open System.Xml.Xsl
let applyXSLTransform xml (xslFile:string) =
let xslt = XslCompiledTransform()
let sbuilder = StringBuilder()
use swriter = new StringWriter(sbuilder)
use sreader = new StringReader(xml)
use xreader = new XmlTextReader(sreader)
use xwriter = new XmlTextWriter(swriter)
xslt.Load(xslFile)
xslt.Transform(xreader, xwriter)
sbuilder.ToString()
代码构造了StringBuilder
,这是一个用于构造字符串的内存对象。它将此包装在 StringWriter
和 XmlTextWriter
周围以传递给 Transform
方法。最后,您使用 ToString
方法读取 StringBuilder
的内容。类似的事情发生在为来自 StringReader
的数据创建 XmlTextReader
时,其中包含您的输入 XML.
这是我能想出的,尝试使用推荐的 XmlReader.Create
工厂方法而不是 .NET 1 遗留的 XmlTextReader:
open System
open System.Xml.Xsl
open System.Xml
open System.IO
let transform xml xslt =
let processor = XslCompiledTransform()
use xsltreader = XmlReader.Create(new StringReader(xslt))
processor.Load(xsltreader)
use xmlreader = XmlReader.Create(new StringReader(xml))
use resultwriter = new StringWriter()
processor.Transform(xmlreader, null, resultwriter)
resultwriter.ToString()
但是我对F#没有很深的了解,只是想把我的C#编码方式转换成F#。