gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:42:59 34 4
gpt4 key购买 nike

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

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

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

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

最佳答案

“XML”比无效更糟糕——它格式不正确;参见 Well Formed vs Valid 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 , demo

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

请注意,上述正则表达式不会接受注释或 CDATA部分考虑在内。

关于java - 如何解析无效(错误/格式不正确)的 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59884761/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com