使用jsoup解析XML——防止jsoup“清理”XML <链接>标签

发布于 2024-11-24 09:34:10 字数 254 浏览 1 评论 0 原文

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

那么如何防止jsoup“清理”标签呢?

In most case, I have no problem with using jsoup to parse XML. However, if there are <link> tags in the XML document, jsoup will change <link>some text here</link> to <link />some text here. This makes it impossible to extract text inside the <link> tag using CSS selector.

So how to prevent jsoup from "cleaning" <link> tags?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

魂归处 2024-12-01 09:34:13

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

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

Do not store any text inside <link> element - it's invalid. If you need extra information, keep it inside HTML5 data-* attributes. I'm sure jsoup won't touch it.

<link rel="..." data-city="Warsaw" />
土豪 2024-12-01 09:34:13

对此可以有一个解决方法。在将 XML 传递给 jsoup 之前。转换 XML 文件以用一些虚拟标签替换所有内容并执行您想做的操作。

There can be a workaround for this. Before passing XML to jsoup. Transform XML file to replace all with some dummy tag say and do what you want to do.

逆夏时光 2024-12-01 09:34:12

jsoup 1.6.2 中,我添加了 XML 解析器模式,它将输入解析为-是,不应用 HTML5 解析规则(元素内容、文档结构等)。此模式会将文本保留在 标记中,并允许多个文本等。

下面是一个示例:

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

In jsoup 1.6.2 I have added an XML parser mode, which parses the input as-is, without applying the HTML5 parse rules (contents of element, document structure, etc). This mode will keep text in a <link> tag, and allow multiples of it, etc.

Here's an example:

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());

Returns:

Link text 1: One
Link text 2: Two
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文