4

我正在为朋友写一个应用程序,但我遇到了问题,网站上有这些

<span style="display:none">&amp;0000000000000217000000</span>

我们甚至不知道它们是什么,但我需要删除它们,因为我的应用程序正在输出它们的价值。

有什么方法可以检查它是否在元素中并将其删除?我有一个 for-each 循环解析但是我不知道如何有效地删除这个元素。

谢谢

4

3 回答 3

9

如果您想完全基于样式属性删除这些跨度,请尝试以下代码:

String html = "<span style=\"display:none\">&amp;0000000000000217000000</span>";
html += "<span style=\"display:none\">&amp;1111111111111111111111111</span>";
html += "<p>Test paragraph should not be removed</p>";

Document doc = Jsoup.parse(html);

doc.select("span[style*=display:none]").remove();

System.out.println(doc);

这是输出:

<html>
 <head></head>
 <body>
  <p>Test paragraph should not be removed</p>
 </body>
</html>
于 2012-05-21T15:55:34.290 回答
1

试试这个:

//Assuming you have all the data in a Document called doc:
String cleanData = doc.select("query").text();

文本(); 方法将清除所有 html 标签并用人类可读的内容替换所有编码。哦,是的,然后是方法 ownText(); 这也可能有帮助。我不能说哪个最适合您的目的。

于 2012-05-21T11:05:35.173 回答
0

您可以使用 JSOUP 访问元素的 innerHTML,删除转义字符,并替换 innerHTML:

Elements elements = doc.select('span');
for(Element e : elements) {
    e.html( e.html().replaceAll("&amp;","") );
}

在上面的示例中,使用包含违规字符的所有元素的选择器获取所有元素的集合。之后,将 替换&amp;为空字符串或您想要的任何字符。

此外,您应该知道这&amp;&字符的转义码。如果没有转义&字符,您可能会遇到 HTML 验证问题。就您而言,如果没有其他信息,我假设您只是真的想消除它们。如果没有,这将帮助您入门。祝你好运!

如果您需要删除尾随数字:

// eliminate ampersand and all trailing numbers
e.html( e.html().replaceAll("&amp;[0-9]*","") );

有关正则表达式的更多信息,请参阅Regex Pattern 上的 Javadocs

于 2012-05-21T01:05:36.630 回答