【问题标题】:Quotation-Marks causing IllegalNameException when parsing HTML with JDom2使用 JDom2 解析 HTML 时导致 IllegalNameException 的引号
【发布时间】:2014-07-10 14:19:22
【问题描述】:

大家晚上好!

我正在尝试使用 JDOM2 解析 Java 中的 HTML 页面,以从中访问一些信息。

我的代码如下所示:(刚刚添加了此代码块的包,我的真实源中没有它们)

//Here goes the reading of the site into my String "string" (using NekoHTML)

org.xml.sax.InputSource is = new InputSource();
is.setCharacterStream(new StringReader(string));

org.cyberneko.html.parsers.DOMParser parser = new DOMParser();
parser.parse(is);

org.jdom2.input.DOMBuilder builder = new DOMBuilder();
org.jdom2.Document doc = builder.build(parser.getDocument());

这适用于除某些特殊情况外的所有情况:当网站在元素中包含引号时。这是我的意思的一个例子:

<a href="LINK" title="Der "realismo mágico" und die Phantastische Literatur">Der "realismo mágico" und die Phantastische...</a>

所以,在那个美妙的标签之后,我得到了以下错误跟踪:

SEVERE: org.jdom2.IllegalNameException: The name "literatur"" is not legal for JDOM/XML attributes: XML name 'literatur"' cannot contain the character """.

所以,现在我的问题是:我有哪些选择来处理这个错误? NekoHTML 中是否有我可以使用的功能(使用“setFeature()”),或者我可以使用 JDOM 中的某些功能?

如果没有:是否还有其他适合抓取网站的库,可以在标签中取引号之类的东西?

感谢您的宝贵时间!

【问题讨论】:

  • HTML 无效。 title属性的值有问题。
  • 亨利所说的。您尝试提供给 JDOM 的 DOM 无效。它基本上有一些东西,在“真正的”XML 中,看起来像:literatur"="",这显然是不正确的。它试图告诉 JDOM 属性的名称(不是值)是 literatur"
  • 好吧,我认为这是不对的,但这是我抓取的网站。有没有办法改变它?可能不浏览整个页面?或者只是使用另一个解析器?

标签: java xml parsing jdom


【解决方案1】:

好的,所以我解决了如下问题:

由于对 NekoHTML 没有任何依赖,我切换到 jTidy 作为解析器,它在这种情况下完成这项工作。

问题已回答。

【讨论】:

    猜你喜欢
    • 2017-11-25
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2012-08-06
    • 2014-05-23
    • 1970-01-01
    相关资源
    最近更新 更多