Java:HTMLのネストされた
から区切られたテキストを抽出するにはどうすればよいですか。

StackOverflow https://stackoverflow.com//questions/24008961

質問

例えば:

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

自然言語処理に取り組んでいて、私はそれらを別々に置き換えることができるように、「これは最初に」と「2番目」と「2番目」を抽出しなければならないウェブサイトを翻訳する必要があります。それぞれのDIVの言語テキスト最初にテキストを抽出した場合、「これは最初の2番目の2秒」に表示され、再帰を使ってより深いものを使うと、「2番目の」

のみを抽出します。

私を助けてください!

編集

oneText()メソッドは、次の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>
.

印刷します:

それは

遊離

百科事典

だれでも編集できる

しかしそれは次のものでなければなりません:

その

百科事典

だれでも編集できる

役に立ちましたか?

解決

最初にテキストを抽出した場合、「これは最初の2番目の」

です。

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メソッドになります)

代わりにChildNode(要素のjava:getChildNodesメソッド)を調べます。ノードには、ノードがテキストノード(java:node.text_node)か、要素(java:node.element_node)かどうかを調整するために調べることができるプロパティ "nodetype"(java:getnodetype)があります。それで、あなたを連れて行くためにあなたはこのように見えるノードの木を持っています...

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

外側のDIVに直接2つのノード(最初のテキスト片、および内部DIV)のみが含まれています。その内部のDIVは「2番目」のテキストを含みます。

SOは、ノードがテキストノードである場合、翻訳し、その他の点では要素に再発します。他の種類のノード、コメントなどがありますが、おそらくあなたがおそらくそれらを無視することができます。

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