【问题标题】:Use jsoup to parse XML - prevent jsoup from "cleaning" <link> tags使用 jsoup 解析 XML - 防止 jsoup “清理” <link> 标签
【发布时间】:2011-07-17 06:31:52
【问题描述】:

在大多数情况下,我使用 jsoup 解析 XML 没有问题。但是,如果 XML 文档中有&lt;link&gt; 标签,jsoup 会将&lt;link&gt;some text here&lt;/link&gt; 更改为&lt;link /&gt;some text here。这使得无法使用 CSS 选择器提取 &lt;link&gt; 标记内的文本。

那么如何防止jsoup“清理”&lt;link&gt;标签呢?

【问题讨论】:

标签: java xml-parsing jsoup link-tag


【解决方案1】:

jsoup 1.6.2 中,我添加了一个 XML 解析器模式,它按原样解析输入,而不应用 HTML5 解析规则(元素内容、文档结构等)。此模式会将文本保留在 &lt;link&gt; 标记中,并允许其倍数等。

这是一个例子:

String xml = "<link>One</link><link>Two</link>";
Document xmlDoc = Jsoup.parse(xml, "", Parser.xmlParser());

Elements links = xmlDoc.select("link");
System.out.println("Link text 1: " + links.get(0).text());
System.out.println("Link text 2: " + links.get(1).text());

返回:

Link text 1: One
Link text 2: Two

【讨论】:

  • @Jonathan Hedley:但是如果您使用 JSOUP.Connect 检索 XML 文档,您将如何使用它?因为那样我们根本就没有 xml 的字符串版本。
  • @Ashwin 您只需指定要在连接上使用的解析器。例如。 Jsoup.connect(url).parser(Parser.xmlParser()).get()。请参阅Connection 文档
【解决方案2】:

不要在 &lt;link&gt; 元素中存储任何文本 - 这是无效的。如果您需要额外信息,请将其保存在 HTML5 data-* 属性中。我敢肯定 jsoup 不会碰它。

<link rel="..." data-city="Warsaw" />

【讨论】:

    【解决方案3】:

    可以有一个解决方法。在将 XML 传递给 jsoup 之前。转换 XML 文件,用一些虚拟标签替换所有内容,然后做你想做的事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 2014-04-25
      • 1970-01-01
      • 2012-10-01
      • 2016-09-29
      • 1970-01-01
      相关资源
      最近更新 更多