我试图刮掉"文字"关闭JSoup的网站。我可以干净地得到文本(根本没有格式化,只有文本),或者所有格式仍然附加(即< br>以及< p>和< / p>)。
但是,我似乎无法将格式化版本包含在< br />在任何程度上,这是唯一被特别要求与文本一起使用的东西。
例如,我可以得到这个:
<p><br>Worldwide database</p>
和此:
Worldwide database
但是我无法得到这个,这是我想要的结果:
Worldwide database<br/>
我没有看到任何&lt;通过Firefox上的FireBug插件查看HTML代码时,我想知道这可能是问题吗?或者我的代码中使用的方法是否存在问题?
无论如何,这是我的代码:
Elements descriptionHTML = doc.select("div[jsname]"); // <-- Get access to the text w/ JSoup
String descText = descriptionHTML.text(); // <-- Get the code w/o any formating at all
// This prints out the desired text with the <p><br> and </p>, but no <br/>
for (Element link : descriptionHTML)
{
String jsname = link.attr("jsname");
if( jsname.equals("C4s9Ed")){
System.out.println(link);
break;
}
}
我真的对这个问题有任何帮助。
谢谢, 千斤顶
答案 0 :(得分:1)
HTML没有为<br>
元素定义结束标记。但是,XHTML要求将标记标记为空:<br />
。 JSoup解析两者,但只会打印出普通的HTML(<br>
)。
如果您在Jsoup中使用XML解析器,则<br>
标记不会关闭,因此Jsoup会尝试猜测匹配的结束标记</br>
的位置,这些标记既不符合HTML也不符合XHTML。
如果你想保留换行符信息并删除所有其他标签,我认为你需要在Jsoup之外编写该部分。您可以使用uniqe其他字符串替换所有<br>
和<br />
字符串,例如"_brSplitPos_"
,然后使用JSoup解析文档,仅打印文本并替换{{1} } "_brSplitPos_"
:
<br />