【发布时间】:2015-05-16 00:12:00
【问题描述】:
我有一个来自外部源的 XML 文档,我每天都需要使用 XML::Simple perl 模块一遍又一遍地解析它。我的脚本是从 crontab 运行的,如果 XML 文档正常,它可以正常工作。但是如果文档无效,我会收到错误消息并死掉,如下所示:
junk after document element at line 740774, column 0, byte 36355798 at /usr/local/lib/perl/5.18.2/XML/Parser.pm line 187.
我在 XML 文档中找到了这一行,它看起来像这样:
<item>
<element1>value1</element1>
<element2>value2</element2>
value3</element3>
<element4>value4</element4>
</item>
我可以在不死的情况下解析这个错误的文档吗?也许从解析器中删除这个项目并发出警告(而不是死!)或者以某种方式忽略错误?
【问题讨论】:
-
不,您无法解析格式错误的 XML。您需要说服创建数据的人正确地执行它,或者在处理它之前自己修复它。错误总是相似的吗?
-
不,它们是变量...我认为它来自源系统的开发人员。如果他们犯了错误,我会得到格式错误的 XML。
-
不要将其视为 XML。可以将其视为创始人发明的专有语法。为这个语法写一个文法,如果有必要的话对其进行逆向工程,然后为这个文法写一个解析器。昂贵,但完全可行。如果您想要更便宜的选择,请说服供应商采用 XML:使用标准可以为每个人节省资金。
-
或者,不要使用此数据馈送。毕竟,如果他们无法获得正确的语法,你为什么要相信内容呢?应该是垃圾吧。
-
这不是替代品。我需要使用它。但是构建一个自己的解析器......这是一个聪明的想法。谢谢。
标签: xml perl xml-parsing