【问题标题】:jsoup to w3c-document: INVALID_CHARACTER_ERRjsoup 到 w3c 文档:INVALID_CHARACTER_ERR
【发布时间】:2016-07-29 23:46:11
【问题描述】:

我的用例:通过 jsoup 获取 html 页面并返回 w3c-DOM 以供 XML 转换进一步处理:

...
org.jsoup.nodes.Document document = connection.get();
org.w3c.dom.Document dom = new W3CDom().fromJsoup(document);
...

适用于大多数文档,但对于某些文档,它会抛出 INVALID_CHARACTER_ERR 而不会告诉哪里。

似乎很难找到错误。我将代码更改为首先将 url 导入字符串,然后通过正则表达式检查错误字符。但这对不良属性(例如,没有价值)等没有帮助。

我目前的解决方案是通过在 jsoup-document(head、img、script ...)中按标签删除元素来最大程度地降低风险。

有没有更优雅的解决方案?

【问题讨论】:

  • 不要忘记将您选择的答案标记为已接受以关闭此问题。

标签: java dom jsoup


【解决方案1】:

OP回复nyname00找到的解决方案:

非常感谢;这解决了问题:

Whitelist whiteList = Whitelist.relaxed();
Cleaner cleaner = new Cleaner(whiteList);
jsoupDom = cleaner.clean(jsoupDom);

“放松”实际上意味着放松的开发人员......

【讨论】:

    【解决方案2】:

    尝试为您的文档将outputSettings 设置为“XML”:

    document
      .outputSettings()
      .syntax(OutputSettings.Syntax.xml);
    
    document 
        .outputSettings()
        .charset("UTF-8");
    

    这应该确保生成的 XML 有效。

    【讨论】:

    • 谢谢。不幸的是,这不能针对 wich 浏览器清除格式错误的 html,这是相当宽容的。例如:。可能源于错误的配置/使用 cms。不受我控制。
    • @Jürg M 嗯,这是一个非常糟糕的格式。看看 Jsoup 的 Cleaner (jsoup.org/cookbook/cleaning-html/whitelist-sanitizer) 也许它可以帮助 - 至少在删除元素方面。另一种选择是将HtmlCleaner (htmlcleaner.sourceforge.net) 之类的内容添加到您的处理管道中。它应该能够输出格式良好的 XML。
    • 非常感谢;这解决了问题: Whitelist whiteList = Whitelist.relaxed();清洁剂清洁剂 = 新清洁剂(白名单); jsoupDom = clean.clean(jsoupDom); “放松”实际上意味着放松的开发人员......
    猜你喜欢
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多