我在C#中使用Saxon-9EE进行XSLT2.0转换(Visual Studio 2012)。但有时在加载源文档时遇到错误(xml大小有25MB)。我为其他文件尝试了相同的代码(小于10 MB),它运行良好。你能帮我解决一下吗?谢谢
Method >> End Copy Directory >> 3/28/2013 3:22:36 AM:857
>> at net.sf.saxon.dotnet.DotNetPullProvider.next()
at net.sf.saxon.pull.PullFilter.next()
at net.sf.saxon.pull.PullPushTee.next()
at net.sf.saxon.pull.PullConsumer.consume()
at net.sf.saxon.pull.PullPushCopier.copy()
at net.sf.saxon.event.Sender.sendPullSource(PullSource , Receiver , ParseOptions )
at net.sf.saxon.event.Sender.send(Source source, Receiver receiver, ParseOptions options)
at net.sf.saxon.Configuration.buildDocument(Source source, ParseOptions parse
Options)
at net.sf.saxon.Configuration.buildDocument(Source source)
**at Saxon.Api.DocumentBuilder.Build(XmlReader reader)**
at DocxCreator_XSL.DocxCreator.CreateDocx() in c:\Users\velagasx\Documents\Vi
sual Studio 2012\Projects\SampleProjects\DocxCreator_XSL\DocxCreator.cs:line 99
>> 3/28/2013 3:22:42 AM:745
答案 0 :(得分:1)
最简单明了的解释是(a)您的XML格式不正确(或有效),以及(b)应用程序中的错误处理不充分。堆栈跟踪顶部的例程调用Microsoft XML解析器,询问下一个事件,并测试来自XML解析器的异常。如果它获得异常,则应该以Saxon.Api.Exception的形式出现在Saxon.Api.DocumentBuilder.Build()的级别;这里应该有一些关于错误性质的基本信息,由于某种原因你没有向我们展示过。
如果使用Apache Xerces解析器(内置于Saxon on .NET)而不是Microsoft解析器构建文档,则可能会获得更好的诊断。这也有XPath id()和idref()函数正常工作的好处 - 它们不适用于使用Microsoft解析器构建的文档,因为M $解析器不能为应用程序提供足够的信息DTD。