2017-02-26 28 views
0

的我有这样jsoup提取所有标签之间的文本,除了一个类型的子标签

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

的HTML代码,我想有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()摆脱了“ - ”。

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

+0

编辑版本的重要性在于要排除的文本元素的_all_前面有一个''标签。那是对的吗? –

+0

要排除的文本元素都是“ smth - ”模式:) – NoSmile

+0

它只显示“there!”。没关系,我会留在我的方法,直到有一个改进:) – NoSmile

回答

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); 
     } 
    } 
} 
+0

布局是不完全是这样的:一个 - 可以重复。 (0,1,2或3次) 因此我将修改我以前的帖子。 但是我的问题更多,如果从jSoup有任何方法可以直接做到这一点? – NoSmile

相关问题