我有一个用saxon 9.x设置的xslt2转换引擎。我有一些带有大型xsl转换文件的大型xml文件。我可以使用XQSharp XSLT2引擎进行转换,但是使用saxon我会收到错误:
javax.xml.transform.TransformerConfigurationException:无法编译样式表。检测到1个错误。
我想从撒克逊人那里得到一些更详细的错误信息,例如错误的亚麻和原因。我能找到的唯一两个例外是:
但他们并没有被扔掉。如何获得详细的错误描述?
我有以下代码:
<WebMethod()> _
Public Function XSLTSaxon(ByVal inputXml As String, ByVal inputXsl As String) As String
Dim response As String = ""
Try
' Create a Processor instance.
Dim processor As New Processor()
' Create xml reader based on xml string
Dim xmlReader As XmlReader = xmlReader.Create(New StringReader(inputXml))
' Load the source document.
Dim input As XdmNode = processor.NewDocumentBuilder().Build(xmlReader)
' Create a transformer for the stylesheet.
Dim transformer As XsltTransformer = processor.NewXsltCompiler.Compile(New StringReader(inputXsl)).Load()
' Set the root node of the source document to be the initial context node.
transformer.InitialContextNode = input
' Create a serializer.
Dim serializer As New Serializer()
Dim result As Stream = New MemoryStream()
serializer.SetOutputStream(result)
transformer.Run(serializer)
result.Position = 0
Using reader As StreamReader = New StreamReader(result)
response = reader.ReadToEnd()
End Using
Catch ex As Saxon.Api.DynamicError
response = String.Format("<error>dynamicerror</error>", ex.ToString)
Catch ex As Saxon.Api.StaticError
response = String.Format("<error>staticerror</error>", ex.ToString)
Catch ex As Exception
response = String.Format("<error>{0}</error>", ex.ToString)
End Try
Return response
End Function
答案 0 :(得分:2)
默认情况下,编译错误消息将写入标准错误输出流。如果你不是从命令行控制台运行,那么最终在.NET上的东西是一个谜 - 我认为它会被某些日志文件隐藏在系统的某个地方,但它可能是可配置的。处理应用程序错误的最灵活方法是使用XsltCompiler的ErrorList属性 - 如果将此属性设置为空列表,Saxon会将错误信息作为StaticError对象添加到列表末尾。应用程序可以检索它并在最合适的地方显示它。
请注意,如果您访问Saxon的SourceForge页面,您会发现有一个论坛和Saxon问题的邮件列表。发布到这两个位置的问题总能得到答案。 StackOverflow是一个很棒的地方,但无论你的问题是否引起注意,它都会让人大吃一惊。