Pergunta

por Exemplo:

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

Eu estou trabalhando em Processamento de Linguagem Natural e eu tenho que traduzir um site(não usando o Google Translate) por que eu tenho que extrair ambas as frases "esta é a primeira" e "segunda" em separado, para que eu possa substituí-los com outro texto no idioma respectivo divs.Se eu extrair o texto para a primeira irá mostrar "esta é a primeira segunda" e se eu usar recursão para cavar mais fundo, é só extrair o "segundo"

Me ajudar por favor!

EDITAR

Usando ownText() método vai criar problema em o seguinte 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>

Ele irá imprimir:

o que.

livre

enciclopédia

qualquer um pode editar a

Mas tem de ser:

o

que

.

enciclopédia

qualquer um pode editar a

Foi útil?

Solução

Se eu extrair o texto para a primeira irá mostrar "esta é a primeira segunda"

Utilização ownText() em vez de text() e você vai ter apenas o elemento contém diretamente.

Aqui está um exemplo:

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

Outras dicas

Você pode usar o analisador de XML em qualquer linguagem que você está usando.Aqui é para Java: http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/

Parece que você está usando textContent na div para extrair o conteúdo, o que você irá obter o conteúdo desse elemento, e todos os descendentes de elementos.(Java:este seria o getTextContent do método de Elemento)

Em vez de examinar o childNodes (Java:getChildNodes do método de Elemento).Os nós têm uma propriedade "nodeType" (Java:getNodeType) que você pode olhar para descobrir se o nó é um Nó de Texto (Java:Nó.TEXT_NODE), ou um Elemento (Java:Nó.ELEMENT_NODE).Então, para tomar o exemplo que você tem uma árvore de Nós que se parecem com isso...

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

O exterior div diretamente contém apenas dois nós - a primeira parte do texto, e o centro da div.Interior div que contém o texto "segundo".

Para fazer um loop através de nós no exterior div, se o nó é um nó de texto, traduzir, caso contrário, recurse para o Elemento.Observe que existem outros tipos de nós, Comentários e afins, mas para os seus propósitos, você provavelmente pode ignorar aqueles.

Supondo que você esteja usando a API do DOM do w3c 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());

        }

Isso deve funcionar se você estiver usando o checkbox, radio buttons e analisador de HTML.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top