jsoup提取标记之间的所有文本,除了一种类型的子标记

时间:2017-02-26 09:24:46

标签: regex jsoup

我有像这样的HTML代码

<p>
   <i>One</i> - <i>Two</i> - ... <i>N</i> - 
   <tag1>hey</tag1> <tag2>there!</tag2> how are you?
</p>

我想hey there! how are you?

这是我到目前为止所做的:

Elements p = document.select("p");
List<Node> nodes = p.get(0).childNodes();
for (Node node : nodes){
    if (node.nodeName() != "i"){
        if (node.nodeName() != "#text"){
            System.out.print(((Element) node).text());
        } else {
            System.out.print(node);
        }
    }
}

这就是我得到的:

 - - hey there! how are you?

之后,我计划使用.replace()来摆脱“ - ”。

我想知道是否有更好的方法?

1 个答案:

答案 0 :(得分:0)

如果布局肯定是给定的,那么这种变化可能会为您提供帮助。测试<i>元素及其后面的元素。

Element p = document.select("p");
List<Node> nodes = p.childNodes();
for (Node node : nodes){
    if ((node.nodeName() != "i") && (node.previousSibling.nodeName() != "i")){
        if (node.nodeName() != "#text"){
            System.out.print(((Element) node).text());
        }else{
            System.out.print(node);
        }
    }
}