2011-07-21 45 views
0

我有一個用saxon 9.x設置的xslt2轉換引擎。我有一個很大的xml文件和大的xsl轉換文件。我可以與XQSharp XSLT2引擎變換,但與撒克遜我得到錯誤:在.net中從Saxon 9.x獲取詳細的錯誤描述

javax.xml.transform.TransformerConfigurationException: Failed to compile stylesheet. 1 error detected.

我想獲得來自撒克遜與錯誤和原因的例如行號的一些更詳細的錯誤信息。我能發現的唯一的兩個例外是:

  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

默認編譯錯誤信息都寫入標準錯誤輸出流。如果你不是從命令行控制檯運行的話,那麼.NET最終會變成一個謎團 - 我認爲它會被埋在系統某處的某個日誌文件中,但它可能是可配置的。在您的應用程序中處理錯誤的最靈活的方法是使用XsltCompiler的ErrorList屬性 - 如果您將此屬性設置爲空列表,Saxon會將錯誤信息作爲StaticError對象添加到列表末尾,應用程序可以檢索它並將其顯示在最合適的地方。

請注意,如果您訪問撒克遜的SourceForge頁面,您會發現撒克遜問題有論壇和郵件列表。發佈到任何一個地點的問題總能得到答案。 StackOverflow是一個不錯的地方,但它是否會讓你注意到問題。

+0

ErrorList做了伎倆。謝謝 – MLewi

相關問題