【问题标题】:XSLT 1.0 (xsltproc) - Unable to Parse Huge XMLXSLT 1.0 (xsltproc) - 无法解析巨大的 XML
【发布时间】:2020-04-06 09:35:31
【问题描述】:

我正在尝试使用 xsltproc 解析一个长度为 13,00,000 行、大小为 56 MB 的输入 xml 文件。我收到以下错误:

input.xml:245393: parser error : internal error: Huge input lookup
              "description" : "List of values for possible department codes"
                          ^
unable to parse input.xml

我的 xsltproc 能够处理 9,30,000 行、大小为 48 MB 的 xml 文件。

事实上,我尝试通过删除不必要的部分将 xml 行数减少到 600,000 行。不过,同样的错误,这很奇怪,因为它能够解析 900,000 但不能解析 600,000。

我该如何解决这个问题?

【问题讨论】:

  • gitlab.gnome.org/GNOME/libxml2/blob/master/include/libxml/… 中定义了一些查找限制,但 maxLength30 听起来很像 XSD 架构相关问题。该文档是否指的是模式?某些xsl:key 处理是否发生错误?
  • "maxLength:30" 可以忽略。它只是我输入 xml 中的一个字符串。有没有办法可以增加 XML_MAX_LOOKUP_LIMIT?我尝试将 xml 行减少到 600,000。不过,同样的错误,这很奇怪,因为它能够解析 900,000 但不能解析 600,000。
  • 编辑问题以避免混淆
  • 48Mb 并不是一个巨大的文件。如今,“巨大”更像是 48Gb。
  • stackoverflow.com/a/32115337/252228 建议您可以编辑 libxml2 的源代码以设置 XML_PARSE_HUGE 解析器选项(然后我认为禁用任何通常默认设置的基于安全的限制/限制)。然后你需要重新编译。或者尝试使用其中一种语言,例如使用 libxml2 的 Python 或 PHP,它们似乎有选项(例如 lxml.de/parsing.html#parser-options 中的 lxml 声明 huge_tree)在运行时禁用基于安全的限制。

标签: xml xslt xml-parsing xslt-1.0 libxml2


【解决方案1】:

使用 Oxygen XML Editor (Xalan) 解决了我的问题。

【讨论】:

    猜你喜欢
    • 2019-11-21
    • 2014-07-22
    • 2014-08-21
    • 1970-01-01
    • 2010-10-29
    • 2013-02-06
    • 2023-03-18
    相关资源
    最近更新 更多