【问题标题】:Is there a way to get QXmlStreamReader to cope with malformed XML?有没有办法让 QXmlStreamReader 处理格式错误的 XML?
【发布时间】:2015-09-19 00:52:11
【问题描述】:

我正在尝试从网站解析一些值。为此,我使用QXmlStreamReader。开始解析后,我收到 XML 错误:“预期为 '=',但得到了 '>'。”。它打破了这个格式错误的元素:

<tbody pageStartAt >

我想这是因为标准规定标签主名称之后的所有内容都应该附加一些值,如下所示:

<tbody pageStartAt="2" > - this is working.

我的问题是 - 有什么办法可以防止这种情况发生吗?我只想忽略没有值的子标签。我宁愿避免使用 QWebKit - 我认为这是矫枉过正。

【问题讨论】:

  • 您解析的不是 XML,因此您不能指望 QXmlStreamReader 来处理它。不过,修补读者以接受这种格式错误的 XML 应该是一件简单的事情。它比任何其他解决方案都少工作,很可能我们正在谈论一个 2-3 行补丁:)
  • 大多数时候 QXmlStreamReader 会在出错后继续运行。 “它坏了”到底是什么意思?
  • 它将 QXmlStreamReader 设置为错误状态,无法删除。 (有明确的方法 - 但它也会重置处理的字符的偏移量)。
  • 这有点 hacky,但使用 XML 解析器解析 HTML 的一种解决方案是通过 TidyLib 运行它以将其转换为 XHTML。
  • @Bowdzone 等一下,我们是否在认真争论 Qt 的 2-3 行补丁,你已经有源代码并且应该自己编译,这比修补以其他方式使用 XML?为什么不利用阅读器中已经存在的解析器并让它按照您的意愿行事呢? QRegExp 由于基本的理论原因无法解析 XML,所以我们甚至不要开始讨论这个问题。你得到了 Qt 的源代码,使用它

标签: c++ xml qt parsing


【解决方案1】:

我发现最简单的方法是使用 HTMLTidy(感谢 @MrEricSir 的建议)它修复损坏的 XML。一个降级是它添加了不必要的标签,如 /body/ 等。

【讨论】:

    猜你喜欢
    • 2018-12-31
    • 2013-06-20
    • 2019-09-22
    • 2021-03-21
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    相关资源
    最近更新 更多