【发布时间】:2012-05-27 11:59:49
【问题描述】:
我正在为朋友写一个应用程序,但我遇到了问题,网站上有这些
<span style="display:none">&0000000000000217000000</span>
我们甚至不知道它们是什么,但我需要将它们移除,因为我的应用正在输出它们的值。
有什么方法可以检查它是否在元素中并将其删除?我有一个 for-each 循环解析,但是我不知道如何有效地删除这个元素。
谢谢
【问题讨论】:
我正在为朋友写一个应用程序,但我遇到了问题,网站上有这些
<span style="display:none">&0000000000000217000000</span>
我们甚至不知道它们是什么,但我需要将它们移除,因为我的应用正在输出它们的值。
有什么方法可以检查它是否在元素中并将其删除?我有一个 for-each 循环解析,但是我不知道如何有效地删除这个元素。
谢谢
【问题讨论】:
如果您想完全基于样式属性删除这些跨度,请尝试以下代码:
String html = "<span style=\"display:none\">&0000000000000217000000</span>";
html += "<span style=\"display:none\">&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>
【讨论】:
试试这个:
//Assuming you have all the data in a Document called doc:
String cleanData = doc.select("query").text();
.text();方法将清除所有 html 标签并用人类可读的内容替换所有编码。哦,是的,然后是方法 ownText();这也可能有帮助。我不能说哪个最适合你的目的。
【讨论】:
可以使用JSOUP访问元素的innerHTML,去掉转义字符,替换innerHTML:
Elements elements = doc.select('span');
for(Element e : elements) {
e.html( e.html().replaceAll("&","") );
}
在上面的示例中,使用包含违规字符的所有元素的选择器获取所有元素的集合。然后,将&amp; 替换为空字符串或您希望的任何字符。
此外,您应该知道&amp; 是& 字符的转义码。如果不转义 & 字符,您可能会遇到 HTML 验证问题。就您而言,如果没有其他信息,我假设您只是真的想消除它们。如果没有,这将帮助您入门。祝你好运!
如果您需要删除尾随数字:
// eliminate ampersand and all trailing numbers
e.html( e.html().replaceAll("&[0-9]*","") );
有关正则表达式的更多信息,请参阅Javadocs on Regex Pattern。
【讨论】:
& 和数字,那么只需使用 e.html(""); 并将其设置为等于空字符串。否则,使用正则表达式。