gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:45:14 26 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, '')
    • 对于&ampersands,使用正则表达式将匹配项替换为&: credit:blhsin , demo

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

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

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

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