我正在尝试将我们的系统数据(以 xml 格式)转换为定义的输出 xml 文件。
为了创建这个输出 xml,我计划使用 XSLT 2.0 版。因此我使用的是 Saxon EE 评估版(SaxonEE9-5-1-2 版本)
我正在尝试向我的团队演示该软件,从而购买该软件并使用 XSLT 2.0、XQuery 等的特性和功能
目前我正在做一个原型项目——我遇到了问题。
VB.NET 转换代码如下:
Dim strXSLT As String = String.Empty
Dim strXML As String = String.Empty
'Retrieve data from database as string
strXML = GetData()
Dim processor As Saxon.Api.Processor = New Saxon.Api.Processor()
Dim builder As Saxon.Api.DocumentBuilder = processor.NewDocumentBuilder()
'Retrieve XSLT file content from database as string
strXSLT = GetXSLT()
'Convert XSLT string data as memorystream
Dim byteDataXSLT() As Byte
byteDataXSLT = System.Text.Encoding.UTF8.GetBytes(strXSLT)
Dim msXSLT As New System.IO.MemoryStream(byteDataXSLT,0, byteDataXSLT.Length)
'Convert XML string data as memorystream
Dim byteDataXML() As Byte
byteDataXML = System.Text.Encoding.UTF8.GetBytes(strXML)
Dim msXML As New System.IO.MemoryStream(byteDataXML,0, byteDataXML.Length)
'Save the xml file before processing
Dim fsXML As New System.IO.FileStream("C:\Temp\XML.xml", System.IO.FileMode.OpenOrCreate)
Dim byteFileXML() As Byte
byteFileXML = msXML.ToArray()
fsXML.Write(byteFileXML, 0, byteFileXML.Length)
'Save the xsl file before processing
Dim fsXSLT As New System.IO.FileStream("C:\Temp\XSL.xslt", System.IO.FileMode.OpenOrCreate)
Dim byteFileXSLT() As Byte
byteFileXSLT = msXSLT.ToArray()
fsXSLT.Write(byteFileXSLT, 0, byteFileXSLT.Length)
Dim sURI As New Uri("file:///C:/")
builder.BaseUri = sURI
Dim input As Saxon.Api.XdmNode = builder.Build(msXML)
Dim transformer As Saxon.Api.XsltTransformer = processor.NewXsltCompiler().Compile(msXSLT).Load()
transformer.InitialContextNode = input
Dim serializer As New Saxon.Api.Serializer()
serializer.SetOutputFile(strOutputFileName)
transformer.Run(serializer)
只有当我运行程序时,我才会在下一行出现错误。当我手动进行转换时,我没有收到此错误。
Dim transformer As Saxon.Api.XsltTransformer = processor.NewXsltCompiler().Compile(msXSLT).Load()
错误信息:
saxon9ee javax.xml.transform.TransformerConfigurationException: Failed to compile stylesheet.
但是当我将 xml 和 xslt 内存流保存到文件流并手动进行转换时,我们得到了所需的输出。
我们正试图找出这个问题的根本原因,但没有运气。
有关此错误消息的任何详细信息都将非常有帮助,非常感谢。
如果您需要更多信息,请告诉我。
提前谢谢了
拉古