在通过 Jsoup 解析 Jspx 文件时,我注意到当遇到新行并且如果存在结束 html 标记时,jsoup 会将内容视为标记外部。另外,我不希望内容出现在介于两者之间的输出中。
例如:-
我的 jspx 文件:-
<div xmlns:spring="http://www.springframework.org/tags"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:util="urn:jsptagdir:/WEB-INF/tags/util"
xmlns:jsp="http://java.sun.com/JSP/Page">
<div> I only require this text </div>
<script type="text/javascript">
var myVar= '${myVar}',
var myVar1= '${myVar1}',
var myVar2= '${myVar2}',
var myVar3= '${myVar3}',
var myVar4= '${myVar4}';
</script>
在java代码中:-
Document doc = Jsoup.parse(s);
String text = doc.body().text();
现在,当我运行这段代码时:-
实际营业收入:-
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:util="urn:jsptagdir:/WEB-INF/tags/util"
xmlns:jsp="http://java.sun.com/JSP/Page">
I only require this text
var myVar= '${myVar}',
var myVar1= '${myVar1}',
var myVar2= '${myVar2}',
var myVar3= '${myVar3}',
var myVar4= '${myVar4}';
预期是:-
I only require this text
添加评论时会发生同样的事情,在几行之后我将关闭评论,然后它也会在输出中显示 ("-->")。
我可能做错了什么,或者可能不知道 Jsoup 的完整范围。谁能帮我解决这个问题?
谢谢。
最佳答案
有了给定的输入和您的命令,JSoup 实际上正在做正确的事情。
让我们分解一下:
Document doc = Jsoup.parse(s);
当呈现任意字符串进行解析时,JSoup 会将其包装在 <html>
中和 <body>
生成结果 Document
的标签有点有效。
String text = doc.body().text();
现在您要求 all the text of the document's body
and all its children .因此,JSoup 很高兴地为您提供了这一点 - 剥离它可以识别的标签,并为您留下比您想要的更多的东西。
JSoup 的真正强大之处在于 select()
method on Elements
, 所以让我们用它来缩小到 div
感兴趣的:
String text = doc.body().select("div div").text();
如果您不熟悉 CSS 和/或 JQuery,这只是简单地选择了属于 div
的元素。在另一个里面 div
- 它应该很好地挑选出你的目标文本。
请注意,如果您想要真正安全,最好确定感兴趣的 div(即 <div id="mydiv">I only require this text</div>
),然后也使用 ownText
优于 text
:
String text = doc.body().select("div#mydiv").ownText();
ownText()
only gets the immediate text of this element ,所以如果有人向 #mydiv
添加子元素它不会破坏任何东西/
关于java - 使用 Jsoup 处理新行/换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29278527/