0

我在 C#(Visual Studio 2012)中使用 Saxon-9EE 进行 XSLT2.0 转换。但有时在加载源文档时会出现错误(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
4

1 回答 1

1

最简单和最明显的解释是 (a) 您的 XML 格式不正确(或无效),以及 (b) 您的应用程序中的错误处理不充分。堆栈跟踪顶部的例程调用 Microsoft XML 解析器请求下一个事件,并测试来自 XML 解析器的异常。如果它得到一个异常,这应该以 Saxon.Api.Exception 的形式出现在 Saxon.Api.DocumentBuilder.Build() 级别;这里应该有一些关于错误性质的基本信息,由于某种原因你没有向我们展示。

如果您使用 Apache Xerces 解析器(内置于 .NET 上的 Saxon)而不是 Microsoft 解析器来构建文档,您可能会获得更好的诊断。这也将带来 XPath id() 和 idref() 函数正常工作的好处——它们不适用于使用 Microsoft 解析器构建的文档,因为 M$ 解析器没有向应用程序提供足够的信息DTD。

于 2013-05-01T07:50:31.310 回答