Étant donné la chaîne "<table><tr><td>Hello World!</td></tr></table>"
, quel est le moyen (le plus facile) d'obtenir un élément DOM le représentant?Comment puis-je analyser une chaîne HTML en Java?
Répondre
J'ai trouvé cela quelque part (ne me souviens pas où):
public static DocumentFragment parseXml(Document doc, String fragment)
{
// Wrap the fragment in an arbitrary element.
fragment = "<fragment>"+fragment+"</fragment>";
try
{
// Create a DOM builder and parse the fragment.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document d = factory.newDocumentBuilder().parse(
new InputSource(new StringReader(fragment)));
// Import the nodes of the new document into doc so that they
// will be compatible with doc.
Node node = doc.importNode(d.getDocumentElement(), true);
// Create the document fragment node to hold the new nodes.
DocumentFragment docfrag = doc.createDocumentFragment();
// Move the nodes into the fragment.
while (node.hasChildNodes())
{
docfrag.appendChild(node.removeChild(node.getFirstChild()));
}
// Return the fragment.
return docfrag;
}
catch (SAXException e)
{
// A parsing error occurred; the XML input is not valid.
}
catch (ParserConfigurationException e)
{
}
catch (IOException e)
{
}
return null;
}
Comment comptez-vous faire usage des capacités de traitement HTML qui sont construit en Java? Vous ne pouvez pas savoir que Swing contient toutes les classes nécessaires pour analyser HTML. Jeff Heaton vous montre comment.
Vous pouvez utiliser l'analyseur HTML, une bibliothèque Java utilisée pour analyser le code HTML de manière linéaire ou imbriquée. Il est un outil open source et se trouve sur SourceForge
Je l'ai utilisé Jericho HTML Parser il est OSS, Détecte (pardons) balises mal formaté et est léger
Voici un moyen:
import java.io.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;
public class HtmlParseDemo {
public static void main(String [] args) throws Exception {
Reader reader = new StringReader("<table><tr><td>Hello</td><td>World!</td></tr></table>");
HTMLEditorKit.Parser parser = new ParserDelegator();
parser.parse(reader, new HTMLTableParser(), true);
reader.close();
}
}
class HTMLTableParser extends HTMLEditorKit.ParserCallback {
private boolean encounteredATableRow = false;
public void handleText(char[] data, int pos) {
if(encounteredATableRow) System.out.println(new String(data));
}
public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
if(t == HTML.Tag.TR) encounteredATableRow = true;
}
public void handleEndTag(HTML.Tag t, int pos) {
if(t == HTML.Tag.TR) encounteredATableRow = false;
}
}
Si vous avez une chaîne qui contient HTML, vous pouvez utiliser Jsoup bibliothèque comme ceci pour obtenir des éléments HTML:
String htmlTable= "<table><tr><td>Hello World!</td></tr></table>";
Document doc = Jsoup.parse(htmlTable);
// then use something like this to get your element:
Elements tds = doc.getElementsByTag("td");
// tds will contain this one element: <td>Hello World!</td>
Bonne chance!
Cette bibliothèque fait simplement le travail, merci! – negstek
- 1. Comment analyser une chaîne en JavaScript?
- 2. Comment analyser une chaîne avec 0
- 3. Analyser html en utilisant C
- 4. Comment analyser une chaîne de date HTTP en Python?
- 5. Format/analyser une chaîne Vb
- 6. regex pour analyser html
- 7. Comment analyser une structure de données sérialisée PHP en Java?
- 8. Comment analyser long négatif en hexadécimal en Java
- 9. En Java, comment analyser XML en tant que chaîne au lieu d'un fichier?
- 10. Besoin d'aide pour analyser HTML en C#
- 11. Comment analyser une chaîne HTML pour les balises d'image pour obtenir les informations SRC?
- 12. Comment récupérer du code HTML en Java
- 13. Comment analyser une URL en C?
- 14. Analyser une chaîne XML dans MySQL
- 15. Analyser plusieurs doubles d'une chaîne en C#
- 16. Comment analyser html et css pour comprendre la mise en page de la page (java)
- 17. Analyser une chaîne URL dans Ruby
- 18. Comment transformer une chaîne en InputStreamReader en java?
- 19. Comment convertir une chaîne en RegularTimePeriod en java?
- 20. Comment analyser XML dans une chaîne dans .NET?
- 21. Convertir une chaîne de base25 à chaîne binaire en Java
- 22. Comment analyser du texte dans des listes en Java?
- 23. Convertir une chaîne en double - Java
- 24. Comment analyser une variable Javascript
- 25. expression régulière pour analyser la chaîne d'option
- 26. Meilleure façon d'analyser une chaîne XML en Java?
- 27. Comment analyser une devise Montant (US ou UE) à la valeur flottante en Java
- 28. Parsing une chaîne contenant des caractères échappées en Java
- 29. Comment concevez-vous une bonne chaîne d'espace permgen en Java?
- 30. Comment valider une chaîne en utilisant regex dans Java
Et si je veux mettre toutes les données dans un tableau de la classe externe plutôt que de les imprimer? – CodyBugstein
@Imray, allez-y, vous avez la permission de les mettre dans une sorte de collection au lieu de les imprimer :) –
Je les ai mises dans une collection à l'intérieur de la classe 'HTMLTableParser', puis j'ai créé une méthode getter pour les obtenir. Est-ce la meilleure façon de le faire? – CodyBugstein