我测试了Jsoup,但我无法删除不需要的标签的文本节点。 如果我错了方法,请发信息。 方法是:
String pretty = Jsoup.clean("<img src=\"marco\">Capretta</img><i>Sono misterioso</i><p color=\"white\"><font size=\"5\">Ciao</p><p>some text</p><br/> <p>another text</p></font>" , "", Whitelist.basic().addTags("br", "p","i"), new Document.OutputSettings().prettyPrint(true));
System.out.println(pretty);
结果是:
Capretta
<i>Sono misterioso</i>
<p>Ciao</p>
<p>some text</p>
<br>
<p>another text</p>
但我不想要<img>
的文本节点(对其他不需要的标签也有效)......
所以结果更好:
<i>Sono misterioso</i>
<p>Ciao</p>
<p>some text</p>
<br>
<p>another text</p>
我也可以有不同的HTML ......
P.S。问题是Java而不是Javascript !!!
答案 0 :(得分:2)
假设您的HTML足够简单。
您可以先parsing
HTML
children of body tag
然后检索String pretty = Jsoup.clean("<img src=\"marco\">Capretta</img><i>Sono misterioso</i><p color=\"white\"><font size=\"5\">Ciao</p><p>some text</p><br/> <p>another text</p></font>" , "", Whitelist.basic().addTags("br", "p","i"), new Document.OutputSettings().prettyPrint(true));
pretty= Jsoup.parse(pretty).getElementsByTag("body").get(0).children().toString();
System.out.println(pretty);
<i>Sono misterioso</i>
<p>Ciao</p>
<p>some text</p>
<br />
<p>another text</p>
<强>输出:强>
DECLARE @table TABLE
(
routeName VARCHAR(10)
)
insert into @table values
('routeA'),
('routeA'),
('routeA'),
('routeB'),
('routeB'),
('routeC'),
('routeA')
SELECT routename,
Dense_rank()
OVER (
ORDER BY routename) AS routeid
FROM @table
答案 1 :(得分:1)
您面临的问题是:<img>
html标记不允许任何文本节点,即它没有结束标记。您示例中的</img>
无效.html。图像不能像这样跨越内部文本。见here for reference
因此JSoup忽略了结束</img>
,因为它无效。
一种方法是使用Jsoup的XML解析器:
String html = "<img src=\"marco\">Capretta</img><i>Sono misterioso</i>"
+ "<p color=\"white\"><font size=\"5\">Ciao</p>"
+ "<p>some text</p><br/> <p>another text</p></font>";
Document xmldoc = Jsoup.parse(html, "",Parser.xmlParser());
Elements imgs = xmldoc.select("img");
imgs.remove();
System.out.println(xmldoc);