Java:Comment puis-je extraire le texte séparé de imbriquée <div> en HTML?
-
21-12-2019 - |
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
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.