例如:

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

我正在研究自然语言处理,我必须翻译一个网站(不是使用谷歌翻译),我必须分别提取两个句子"这是第一个"和"第二个",以便我可以用各自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 first\n"
        + "    <div>\n"
        + "        second\n"
        + "   </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:这将是元素上的GetTextContent方法)

而是检查子节点(在元素上的java:getChildnode方法)。节点具有属性“NodeType”(Java:GetNodeType),您可以查找,以解决节点是文本节点(Java:node.text_node),或元素(java:node.element_node)。所以要带你的例子,你有一个节点树,看起来像这样...

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

外侧div只包含两个节点 - 第一篇文本和内部div。那个内部div然后包含文本“第二”。

SO循环在外部div中的节点上,如果节点是文本节点,则转换,否则会复发到元素中。请注意,还有其他类型的节点,评论等,但是为了您的目的,您可能会忽略这些节点。

假设您正在使用W3C DOM API http://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解析器,则应该工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top