Domanda

Ad esempio:

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

Sto lavorando all'elaborazione del linguaggio naturale e devo tradurre un sito Web (non utilizzando Google Translate) per il quale devo estrarre entrambe le frasi "questo è il primo" e "secondo" separatamente in modo che io possa sostituirli con altriTesto della lingua nei rispettivi div.Se estrai il testo per il primo, mostrerà "questo è il primo secondo" e se utilizzo la ricorsione per scavare più a fondo, estrarrà solo "secondo"

Aiutami fuori per favore!

Modifica

Utilizzo del metodo OwnText () creerà il problema nel seguente codice 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>
.

Stamperà:

Il quello.

libero

Encyclopedia

Chiunque può modificare

Ma deve essere:

.

Encyclopedia

Chiunque può modificare

È stato utile?

Soluzione

.

Se estrai il testo per il primo, mostrerà "questo è il primo secondo"

Utilizzare ownText() anziché text() e riceverai solo l'elemento contiene direttamente.

Ecco un esempio:

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);
.

Altri suggerimenti

È possibile utilizzare XML Parser, in qualsiasi lingua che stai utilizzando.Qui è per Java: http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-Parser/

Sembra che tu stia usando TextContent nei div per estrarre il contenuto, che ti porterà il contenuto di quell'elemento e tutti gli elementi discendenti. (Java: questo sarebbe il metodo GetTextContent sull'elemento)

Invece esaminare i bambini (Java: Metodo GetChildNodes sull'elemento). I nodi hanno una proprietà "NodeType" (Java: getnodetype) che è possibile guardare per elaborare se il nodo è un nodo di testo (Java: node.text_node) o un elemento (Java: node.element_node). Quindi per portarti ad esempio hai un albero di nodi che assomigliano a questo ...

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

Il div esterno contiene direttamente solo due nodi - il primo pezzo di testo e il div interno. Quel div interno contiene quindi il testo "secondo".

Così loop sopra i nodi nel div esterno, se il nodo è un nodo di testo, traduci, altrimenti ricurse nell'elemento. Si noti che ci sono altri tipi di nodi, commenti e simili, ma per i tuoi scopi puoi probabilmente ignorare quelli.

Supponendo che tu stia usando l'API del W3C DOM 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());

        }
.

Questo dovrebbe funzionare se si utilizza Jsoup HTML Parser.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top