Pregunta

Por ejemplo:

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

Estoy trabajando en el procesamiento de lenguaje natural y tengo que traducir un sitio web (no mediante el uso de Google Translate) para el cual tengo que extraer ambas oraciones ", esto es primero" y "Segundo" por separado para que pueda reemplazarlos con otrosTexto de idioma en divogos respectivos.Si extrao el texto para primero, mostrará "Esto es el primer segundo" y si uso la recursión para profundizar, solo extraerá "Segundo"

ayúdame por favor!

editar

El método de uso propio () creará un problema en el siguiente código 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>

imprimirá:

el que.

libre

Enciclopedia

Cualquier persona puede editar

pero debe ser:

el

que

.

Enciclopedia

Cualquier persona puede editar

¿Fue útil?

Solución

Si extrao el texto para primero mostrará "Esto es el primer segundo"

Use ownText() en lugar de text() y obtendrá solo el elemento contiene directamente.

aquí es un ejemplo:

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

Otros consejos

Puede usar el analizador XML, en cualquier idioma que esté usando.Aquí está para Java: http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/

Parece que está usando TextContent en los DIV para extraer el contenido, lo que lo conseguirá el contenido de ese elemento y todos los elementos descendientes. (Java: Este sería el método GetTextContent en el elemento)

En su lugar, examine los nodos infantiles (Java: método de GetChildNodes en el elemento). Los nodos tienen una propiedad "NODETYPE" (Java: getnodetype) que puede ver para hacer ejercicio si el nodo es un nodo de texto (java: nodo.text_node), o un elemento (Java: nodo.element_node). Así que para tomarte ejemplo, tienes un árbol de nodos que se ven así ...

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

El DIV externo contiene directamente solo dos nodos: la primera pieza de texto, y el DIV interno. Que DIV interno contiene el texto "segundo".

SO LOIL sobre los nodos en el DIV externo, si el nodo es un nodo de texto, traduce, de lo contrario, se recurre en el elemento. Tenga en cuenta que hay otros tipos de nodos, comentarios y similares, pero para sus propósitos, probablemente puede ignorarlos.

asumiendo que estás usando la API de 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());

        }

Esto debería funcionar si está utilizando el analizador HTML de JSOUP.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top