Question

par Exemple:

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

Je suis en train de travailler sur le Traitement du Langage Naturel et, je dois traduire un site web(pas en utilisant Google Translate) pour laquelle j'ai extrait les deux phrases "c'est la première" et "seconde", séparément, de sorte que je peux les remplacer par d'autres textes de langue dans les différentes divisions.Si je extraire le texte pour la première, il va montrer "c'est la première seconde" et si j'utilise la récursivité pour creuser plus profond, il ne extrait de "deuxième"

Aidez moi s'il vous plaît!

MODIFIER

À l'aide de ownText() la méthode permettra de créer de problème dans le code html suivant:

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

Il apparaîtra à l'impression:

le que.

gratuit

encyclopédie

n'importe qui peut éditer

Mais il doit être:

l'

que

.

encyclopédie

n'importe qui peut éditer

Était-ce utile?

La solution

Si je extraire le texte pour la première, il va montrer "c'est la première seconde"

Utilisation ownText() au lieu de text() et vous aurez seulement l'élément contient directement.

Voici un exemple:

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

Autres conseils

Vous pouvez utiliser XML Parser, dans toute la langue que vous utilisez.Voici pour Java: http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/

On dirait que vous utilisez TextContent dans la DIV pour extraire le contenu, qui vous permettra de vous procurer le contenu de cet élément et tous les éléments descendants. (Java: Ce serait la méthode GetTextContent sur l'élément)

Au lieu de cela, examinez les enfants (Java: méthode de getChildNodes sur l'élément). Les nœuds ont une propriété "NodeType" (Java: getNodeType) que vous pouvez regarder pour déterminer si le nœud est un nœud texte (java: nœud.text_node) ou un élément (Java: nœud.Element_node). Donc, pour vous prendre exemple, vous avez un arbre de nœuds qui ressemblent à ceci ...

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

L'extérieur DIV ne contient que deux nœuds - la première pièce de texte et la DIV intérieure. Que Inner DIV contient alors le texte "seconde".

Ainsi, en boucle sur les nœuds de l'extérieur, si le nœud est un nœud texte, traduire, sinon recueille dans l'élément. Notez qu'il existe d'autres types de nœuds, de commentaires et autres, mais à vos fonctions, vous pouvez probablement ignorer ceux-ci.

en supposant que vous utilisez l'API DOM 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());

        }

Cela devrait fonctionner si vous utilisez JSOUP HTML Parser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top