XSLT 1.0 (xsltproc) - 无法解析巨大的 XML
Posted
技术标签:
【中文标题】XSLT 1.0 (xsltproc) - 无法解析巨大的 XML【英文标题】:XSLT 1.0 (xsltproc) - Unable to Parse Huge 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/… 中定义了一些查找限制,但maxLength
与 30
听起来很像 XSD 架构相关问题。该文档是否指的是模式?某些xsl:key
处理是否发生错误?
"maxLength:30" 可以忽略。它只是我输入 xml 中的一个字符串。有没有办法可以增加 XML_MAX_LOOKUP_LIMIT?我尝试将 xml 行减少到 600,000。不过,同样的错误,这很奇怪,因为它能够解析 900,000 但不能解析 600,000。
编辑问题以避免混淆
48Mb 并不是一个巨大的文件。如今,“巨大”更像是 48Gb。
***.com/a/32115337/252228 建议您可以编辑 libxml2 的源代码以设置 XML_PARSE_HUGE
解析器选项(然后我认为禁用任何通常默认设置的基于安全的限制/限制)。然后你需要重新编译。或者尝试使用其中一种语言,例如使用 libxml2 的 Python 或 php,它们似乎有选项(例如 lxml.de/parsing.html#parser-options 中的 lxml 声明 huge_tree
)在运行时禁用基于安全的限制。
【参考方案1】:
使用 Oxygen XML Editor (Xalan) 解决了我的问题。
【讨论】:
以上是关于XSLT 1.0 (xsltproc) - 无法解析巨大的 XML的主要内容,如果未能解决你的问题,请参考以下文章