【问题标题】:Getting detailed error description from Saxon 9.x in .net从 .net 中的 Saxon 9.x 获取详细的错误描述
【发布时间】:2011-07-21 07:25:13
【问题描述】:

我有一个使用 saxon 9.x 设置的 xslt2 转换引擎。我有一些带有大型 xsl 转换文件的大型 xml 文件。我可以使用 XQSharp XSLT2 引擎进行转换,但使用 saxon 时出现错误:

javax.xml.transform.TransformerConfigurationException:编译样式表失败。检测到 1 个错误。

我想从撒克逊获得一些更详细的错误信息,例如错误的行号和原因。我能找到的唯一两个例外是:

  1. Saxon.Api.DynamicError
  2. Saxon.Api.StaticError

但它们不会被抛出。如何获取详细的错误描述?

我有以下代码:

<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

【问题讨论】:

    标签: .net xslt xslt-2.0 saxon


    【解决方案1】:

    默认情况下,编译错误消息被写入标准错误输出流。如果您不是从命令行控制台运行,那么这在 .NET 上的最终位置是一个谜——我认为它会转到埋在系统某处的某个日志文件,但它可能是可配置的。在您的应用程序中处理错误最灵活的方法是使用 XsltCompiler 的 ErrorList 属性 - 如果您将此属性设置为空列表,Saxon 会将错误信息作为 StaticError 对象添加到列表的末尾,您的应用程序可以检索它并将其显示在最合适的位置。

    请注意,如果您访问 Saxon 的 SourceForge 页面,您会发现有一个论坛和一个针对 Saxon 问题的邮件列表。发布到其中任何一个位置的问题总会得到答案。 StackOverflow 是一个很棒的地方,但你的问题是否会被注意到是偶然的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多