Получение подробного описания ошибки от Saxon 9.x в .net - PullRequest
0 голосов
/ 21 июля 2011

У меня есть двигатель преобразования xslt2, настроенный с помощью saxon 9.x.У меня есть большой XML-файл с большим XSL-файлом преобразования.Я могу сделать преобразование с помощью XQSharp XSLT2, но с помощью saxon получаю ошибку:

javax.xml.transform.TransformerConfigurationException: Не удалось скомпилировать таблицу стилей.Обнаружена 1 ошибка.

Я хотел бы получить более подробную информацию об ошибке от saxon, например, с указанием номера ошибки и причины.Единственные два исключения, которые я смог найти:

  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

1 Ответ

2 голосов
/ 23 июля 2011

По умолчанию сообщения об ошибках компиляции записываются в стандартный поток вывода ошибок. Где это заканчивается в .NET, является чем-то загадочным, если вы не запускаете его из консоли командной строки - я думаю, что это идет к некоторому файлу журнала, похороненному где-то в системе, но он, вероятно, настраивается. Самый гибкий способ обработки ошибок в вашем приложении - это использование свойства ErrorList XsltCompiler - если вы установите это свойство в пустой список, Saxon добавит информацию об ошибке в конец списка в виде объекта StaticError, откуда ваш приложение может извлечь его и отобразить там, где это наиболее удобно.

Обратите внимание, что если вы перейдете на страницу SourceForge для саксонцев, то найдете там и форум, и список рассылки по саксонским вопросам. На вопросы, отправленные в одно из этих мест, всегда будет ответ. StackOverflow - это отличное место, но если ваш вопрос будет замечен, то это будет ударом.

...