使用Jsoup处理新的换行符/换行符

时间:2015-03-26 12:32:11

标签: java javascript jsp jsoup jspx

在通过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();

现在,当我运行此代码时: -

实际O / P: -

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

添加评论时会发生同样的事情,在几行后我关闭评论然后它也会在输出中显示(“ - &gt;”)。

我可能做错了或者可能没有意识到Jsoup的完整范围。任何人都可以帮我这个吗?

感谢。

1 个答案:

答案 0 :(得分:1)

使用给定的输入和命令,JSoup实际上正在做正确的事情。

让我们分解一下:

Document doc = Jsoup.parse(s);

当提供要解析的任意String时,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的元素 - 这应该很好地选择您的目标文本。 / p>

请注意,如果您想要非常安全,最好确定感兴趣的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,它就不会破坏任何内容/