Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从HTML中获取不同的元素_Java_Html_Groovy_Jsoup - Fatal编程技术网

Java 从HTML中获取不同的元素

Java 从HTML中获取不同的元素,java,html,groovy,jsoup,Java,Html,Groovy,Jsoup,我想从HTML页面中获取包含一些文本的不同元素,这样冗余就最小了。 例如: 导演 12345678 对于以上HTML,我希望将这些项目作为元素: 导演12345678 这是我写的代码,到目前为止,它运行得很好,除了在上面的示例中,没有收集文本Director 123 456 78。 我试图添加| |元素。ownText()!=“在之后!”!element.isBlock()但它会导致许多重复 私有静态子元素(元素){ if(element.children().size()>0

我想从HTML页面中获取包含一些文本的不同元素,这样冗余就最小了。 例如:




导演
12345678

对于以上HTML,我希望将这些项目作为
元素

  • 导演
    12345678
这是我写的代码,到目前为止,它运行得很好,除了在上面的示例中,没有收集文本
Director 123 456 78
。 我试图添加
| |元素。ownText()!=“
之后!”!element.isBlock()
但它会导致许多重复

私有静态子元素(元素){
if(element.children().size()>0){
element.children().collect{it->
如果(!element.isBlock())
[元素、子元素(it)]
其他儿童(it)
}
}else if(element.hasText()| | element.attr(“alt”)!=“”
||element.attr(“title”)!=“”| | element.attr(“href”)!=“”){
要素
}否则{
[]
}
}

您是否也可以使用jquery来实现上述目标

做一些像这样的事情怎么样:

 $('.buisness_card').each(function(i, obj) {
    $(this).text(); //Maybe set a variable here
}); 
这应该循环通过
buisness\u card
div,获取该div中的html值,并返回每个div中的文本内容。我制作了一个JSFIDLE来显示以下内容:

示例:

希望我在这里正确地阅读并理解您,jQuery可能是一种选择

编辑:


按钮仅与
empty()
append()
一起存在,以设置一个可用的示例,这样您就可以看到它发生了。显然,oyu可以在不使用任何一个的情况下使用它。

如何:迭代所有子节点,并将包含感兴趣节点的子节点添加到节点的结果中。这些子节点将从当前节点中删除。如果“剩余”节点
hasText
(仅删除空格节点)和
是block
(可选),则也将此元素添加到结果中

这至少适用于给定的示例。如果您想让该
节点内部没有其他有效元素,则必须构建它,或者通过删除不需要的元素来创建它。您可能仍然需要在剩余节点本身中执行一些额外的筛选(例如,还需要删除所有剩余的子节点,即
)。我希望这能给你一些启发:

@Grab('org.jsoup:jsoup:1.8.1')
import org.jsoup.*
import org.jsoup.nodes.*

def doc = Jsoup.parse('''\
<div class="business_card">
<p>
<span id="title"><b><a href="board" target="_self">John ABC</a></b></span>
<br>
Director <br>
123 456 78<br>
<span class="email"><a href="mailto:john.abc@example.com">Send me an email &raquo;</a></span>
</p>
</div>''')

def collectChildren(Element element) {
    if (element.children().size() > 0) {
        def found = []
        element.children().findAll{
            def c = collectChildren(it).flatten()
            if (c) {
                found.addAll(c)
            } 
            return c
        }*.remove()
        if (element.hasText() && element.isBlock()) {
            found << element
        }
        found
    } else if (element.hasText() || element.attr("alt") || element.attr("title") || element.attr("href")) {
        [element]
    } else {
        []
    }
}

println collectChildren(doc.body()).flatten().join("\n")
// <a href="board" target="_self">John ABC</a>
// <a href="mailto:john.abc@example.com">Send me an email »</a>
// <p>  <br> Director <br> 123 456 78<br>  </p>
@Grab('org.jsoup:jsoup:1.8.1')
导入org.jsoup*
导入org.jsoup.nodes*
def doc=Jsoup.parse(“”)\


导演
12345678

''') def collectChildren(元素){ if(element.children().size()>0){ def found=[] element.children().findAll{ def c=collectChildren(it).flatten() 如果(c){ 已找到。addAll(c) } 返回c }*.删除() if(element.hasText()&&element.isBlock()){ 建立