首页 >Java >如何解析无效(错误/格式不正确)的 XML?

如何解析无效(错误/格式不正确)的 XML?

PHPz
PHPz转载
2024-02-09 23:20:40773浏览

php小编百草为您介绍如何解析无效的XML文件。在处理XML文件时,有时会遇到无效的XML,可能是因为格式不正确或包含错误。解析无效的XML文件是一项重要的任务,以确保我们能够正确地获取所需的数据。为了解决这个问题,我们可以使用PHP的内置函数和库来检查和修复无效的XML。下面我们将详细介绍几种常用的方法来解析无效的XML文件。

问题内容

目前,我正在开发一项功能,该功能涉及解析我们从其他产品收到的 xml。我决定针对一些实际的客户数据运行一些测试,看起来其他产品允许用户输入应被视为无效的输入。无论如何,我仍然必须尝试找出一种解析它的方法。我们正在使用 javax.xml.parsers.documentbuilder,我在输入时收到如下错误。

<xml>
  ...
  <description>Example:Description:<THIS-IS-PART-OF-DESCRIPTION></description>
  ...
</xml>

正如您所知,描述中似乎包含无效标签(d30036ddc824403d51b03f80ff62bdc4)。现在,这个描述标签被认为是叶标签,并且内部不应该有任何嵌套标签。无论如何,这仍然是一个问题,并在 documentbuilder.parse(...) 上产生异常

我知道这是无效的 xml,但可以预见它是无效的。关于解析此类输入的方法有什么想法吗?

解决方法

“xml”比无效更糟糕——它格式不正确;请参阅格式良好与有效的 xml

对违规行为的可预测性进行非正式评估没有帮助。该文本数据不是 xml。没有一致的 xml 工具或库可以帮助您处理它。

选项,最理想的第一个:

  1. 让提供商自行解决问题。 需要格式良好的 xml。(从技术上讲,格式良好的 xml 一词是多余的,但可能有助于强调。)

  2. 使用宽容标记解析器在解析为 xml 之前解决问题:

  3. 使用文本编辑器手动将数据处理为文本或 以编程方式使用字符/字符串函数。这样做 以编程方式可以从棘手到不可能作为 看起来是什么 可预测的往往不是——打破规则很少受到规则的约束

    • 对于无效字符错误,请使用正则表达式删除/替换无效字符:

      • php: preg_replace('/[^\x{0009}\x{000a}\x{000d} \x{0020}-\x{d7ff}\x{e000}-\x{fffd}]+/u', ' ', $s);
      • ruby: string.tr ("^\u{0009}\u{000a}\u{000d}\u{0020}-\u{d7ff}\u{e000‌​}-\u{fffd}", ' ')
      • javascript: inputstr.replace (/[^\x09\x0a\x0d\x20-\xff\x85\xa0-\ud7ff\ue000-\ufdcf\ufde0-\ufffd]/gm, '')
    • 对于与号,使用正则表达式将匹配项替换为 &amp;: 信用:blhsin演示 p>

      &amp;(?!(?:#\d+|#x[0-9a-f]+|\w+);)

请注意,上述正则表达式不会接受注释或 cdata

按照设计,标准 xml 解析器永远不会接受无效的 xml。

您唯一的选择是在解析输入之前预处理输入以删除“可预见的无效”内容,或将其包装在 cdata 中。

以上是如何解析无效(错误/格式不正确)的 XML?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除