php小编百草为您介绍如何解析无效的xml文件。在处理xml文件时,有时会遇到无效的xml,可能是因为格式不正确或包含错误。解析无效的xml文件是一项重要的任务,以确保我们能够正确地获取所需的数据。为了解决这个问题,我们可以使用php的内置函数和库来检查和修复无效的xml。下面我们将详细介绍几种常用的方法来解析无效的xml文件。
问题内容
目前,我正在开发一项功能,该功能涉及解析我们从其他产品收到的 xml。我决定针对一些实际的客户数据运行一些测试,看起来其他产品允许用户输入应被视为无效的输入。无论如何,我仍然必须尝试找出一种解析它的方法。我们正在使用 javax.xml.parsers.documentbuilder,我在输入时收到如下错误。
... Example:Description: ...
正如您所知,描述中似乎包含无效标签()。现在,这个描述标签被认为是叶标签,并且内部不应该有任何嵌套标签。无论如何,这仍然是一个问题,并在 documentbuilder.parse(...) 上产生异常
我知道这是无效的 xml,但可以预见它是无效的。关于解析此类输入的方法有什么想法吗?
解决方法
“xml”比无效更糟糕——它格式不正确;请参阅格式良好与有效的 xml。
对违规行为的可预测性进行非正式评估没有帮助。该文本数据不是 xml。没有一致的 xml 工具或库可以帮助您处理它。
选项,最理想的第一个:
-
让提供商自行解决问题。 需要格式良好的 xml。(从技术上讲,格式良好的 xml 一词是多余的,但可能有助于强调。)
-
使用宽容标记解析器在解析为 xml 之前解决问题:
-
独立: xmlstarlet 具有强大的恢复和修复功能功能信用:romanperekhrest
xmlstarlet fo -o -r -h -d bad.xml 2>/dev/null
-
独立和 c/c++: html tidy 有效也可以使用 xml。 taggle 是一个端口tagsoup 到 c++。
动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版下载动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
-
python: 美丽的汤 基于python。请参阅解析器之间的差异部分中的注释。另请参阅此问题的答案了解更多信息 关于处理 python 中格式不正确的标记的建议, 特别包括lxml 的
recover=true选项。 另请参阅此答案了解如何使用recover=true清理非法字符。 java: tagsoup 和xmlstarlet0 专注于 html。 xmlstarlet1 可用于 xmlstarlet2 可以 禁用以解决非法 xml 字符问题。
- xmlstarlet3 xmlstarlet4 可以设置为 xmlstarlet5这样 xmlstarlet6 可以读取xmlstarlet7 .
- xmlstarlet8 xmlstarlet9 有时可以 用于romanperekhrest0,但请注意 下面#3 中的违规警告。
- romanperekhrest1据说是“容错”的。
-
-
转到:设置romanperekhrest2到
codecs.encodedfile(),如romanperekhrest3所示,作者:romanperekhrest4。 -
php:请参阅romanperekhrest5 和 romanperekhrest6。请参阅romanperekhrest7的好示例。
-
ruby:nokogiri 支持“romanperekhrest8”。
-
r:请参阅romanperekhrest9 用于 r 中的容错标记解析。
-
perl:请参阅html tidy0 ,一个“超级自由的 xml 解析器,可以解析损坏的 xml。”
-
使用文本编辑器手动将数据处理为文本或 以编程方式使用字符/字符串函数。这样做 以编程方式可以从棘手到不可能作为 看起来是什么 可预测的往往不是——打破规则很少受到规则的约束。
请注意,上述正则表达式不会接受注释或 cdata
按照设计,标准 xml 解析器永远不会接受无效的 xml。
您唯一的选择是在解析输入之前预处理输入以删除“可预见的无效”内容,或将其包装在 cdata 中。









