Perl:如何解析无效的 XML 文档?
Perl: How to parse invalid XML document?
我有一个来自外部来源的 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>
我能不死的解析这个错误的文档吗?也许从解析器中删除此项并发出警告(而不是死掉!)或以某种方式忽略错误?
你不知道。 Malformed XML 是一个致命错误,您绝对不应该尝试修复它。
根据定义,这是一个致命错误,因为如果不是这样,您最终会遇到解析器必须处理各种边缘情况的情况。所以你应该拒绝 XML,并告诉你的上游人员修复它。
参见:Dealing with malformed XML
尤其是:http://www.xml.com/axml/notes/Draconian.html
We want XML to empower programmers to write code that can be transmitted across the Web and execute on a large number of desktops. However, if this code must include error-handling for all sorts of sloppy end-user practices, it will of necessity balloon in size to the point where it, like Netscape Navigator, or Microsoft Internet Explorer, is tens of megabytes in size, thus defeating the purpose.
在这种情况下 - 您也不应该使用 XML::Simple
其文档中包含:
The use of this module in new code is discouraged. Other modules are available which provide more straightforward and consistent interfaces.
基本上 - XML::Simple
说谎 不是 一个简单的 XML 解析器。 对于 简单 XML。还有更好的选择。
我会建议考虑像XML::Twig
这样的东西。 (还有其他选项 - 这是我最喜欢的)。
但两者都不会处理格式错误的 XML - 任何处理的解析器 根据定义 已损坏。
我有一个来自外部来源的 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>
我能不死的解析这个错误的文档吗?也许从解析器中删除此项并发出警告(而不是死掉!)或以某种方式忽略错误?
你不知道。 Malformed XML 是一个致命错误,您绝对不应该尝试修复它。
根据定义,这是一个致命错误,因为如果不是这样,您最终会遇到解析器必须处理各种边缘情况的情况。所以你应该拒绝 XML,并告诉你的上游人员修复它。
参见:Dealing with malformed XML
尤其是:http://www.xml.com/axml/notes/Draconian.html
We want XML to empower programmers to write code that can be transmitted across the Web and execute on a large number of desktops. However, if this code must include error-handling for all sorts of sloppy end-user practices, it will of necessity balloon in size to the point where it, like Netscape Navigator, or Microsoft Internet Explorer, is tens of megabytes in size, thus defeating the purpose.
在这种情况下 - 您也不应该使用 XML::Simple
其文档中包含:
The use of this module in new code is discouraged. Other modules are available which provide more straightforward and consistent interfaces.
基本上 - XML::Simple
说谎 不是 一个简单的 XML 解析器。 对于 简单 XML。还有更好的选择。
我会建议考虑像XML::Twig
这样的东西。 (还有其他选项 - 这是我最喜欢的)。
但两者都不会处理格式错误的 XML - 任何处理的解析器 根据定义 已损坏。