Java:如何从<div>嵌套在HTML中提取分离的文本?



例如:

<div>
    this is first
    <div>
        second
   </div>
</div>

我正在从事自然语言处理,我必须翻译一个网站(而不是使用谷歌翻译(,我必须分别提取"这是第一个"one_answers"第二个"这两个句子,这样我就可以在各自的div中用其他语言文本替换它们。如果我第一次提取文本,它将显示"这是第一秒",如果我使用递归深入挖掘,它将只提取"第二秒">

请帮帮我!

编辑

使用ownText((方法将在以下html代码中产生问题:

<div style="top:+0.2em; font-size:95%;">
    the
    <a href="/wiki/Free_content" title="Free content">
        free
    </a>
    <a href="/wiki/Encyclopedia" title="Encyclopedia">
        encyclopedia
    </a>
    that
    <a href="/wiki/Wikipedia:Introduction" title="Wikipedia:Introduction">              
        anyone can edit
    </a>
    .
</div>

它将打印:

那个。

免费

百科全书

任何人都可以编辑

但必须是:

百科全书

任何人都可以编辑

如果我第一次提取文本,它将显示"这是第一秒">

使用ownText()而不是text(),您将直接获得仅包含的元素。

这里有一个例子:

final String html = "<div>n"
        + "    this is firstn"
        + "    <div>n"
        + "        secondn"
        + "   </div>n"
        + "</div>";
Document doc = Jsoup.parse(html); // Get your Document from somewhere

Element first = doc.select("div").first(); // Select 1st element - take the first found
String firstText = first.ownText(); // Get own text
Element second = doc.select("div > div").first(); // Same as above, but with 2nd div
String secondText = second.ownText();
System.out.println("1st: " + firstText);
System.out.println("2nd: " + secondText);

您可以使用任何语言的XML解析器。这是针对Java的:http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/

您似乎在div中使用textContent来提取内容,这将获得该元素的内容以及所有派生元素。(Java:这将是Element上的getTextContent方法(

相反,检查childNodes(Element上的Java:getChildNodes方法(。节点有一个属性"nodeType"(Java:getNodeType(,您可以查看该属性来确定节点是Text node(Java:node.Text_node(还是Element(Java:node.Element_node。。。

div (Element)
    this is first (TextNode)
    div (Element)
        second (TextNode)

外部div直接只包含两个节点-第一段文本和内部div。然后,内部div包含文本"second"。

因此,在外部div中的节点上循环,如果节点是文本节点,则translate,否则递归到Element中。请注意,还有其他类型的节点、Comments等,但出于您的目的,您可能会忽略它们。

假设您使用的是w3cDOM APIhttp://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Node.html

 Elements divs=doc.getElementsByTag("div");
     for (Element element : divs) {
            System.out.println(element.text());
        }

如果您使用的是jsoup HTML解析器,这应该会起作用。

最新更新