2016-07-23 6 views
1

Ich versuche nur die Texte eines HTML-Dokuments zu analysieren, das spitze Klammern als Teil des Textes enthält.So verhindern Sie, dass Jsoup spitze Klammern im Text beim Analysieren löscht

Zum Beispiel würde die HTML-Datei wie folgt aussehen:

<html> 
<head></head> 
<body> 
    <div> 
    <p>1. <someUnicodeString></p> 
    <p>2. <foo 2012.12.26.></p> 
    <p>3. <123 2012.12.26.></p> 
    <p>4. <@ 2012.12.26.></p> 
    <p>5. foobarbar</p> 
    </div> 
</body> 
</html> 

ich das Ergebnis der analysierten Textdatei so sein wollen:

1. <someUnicodeString> 
2. <foo 2012.12.26.> 
3. <123 2012.12.26.> 
4. <@ 2012.12.26.> 
5. foobarbar 

Ich Jsoup die Parse-Funktion um dies wie unten gezeigt zu erreichen,

Document doc = null; 

try { 
    doc = Jsoup.parse(new File(path), "UTF-8"); 
    doc.outputSettings(new Document.OutputSettings().prettyPrint(false)); 
    doc.outputSettings().escapeMode(EscapeMode.xhtml); 

    //set line breaks in readable format 
    doc.select("br").append("\\n"); 
    doc.select("p").prepend("\\n\\n"); 
    String bodyText = doc.body().html().replaceAll("\\\\n", "\n"); 
    bodyText = Jsoup.clean(bodyText, "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false)); 

    File f = new File(textFileName+".txt"); 
    f.getParentFile().mkdirs(); 
    PrintWriter writer = new PrintWriter(f, "UTF-8"); 
    writer.print(Parser.unescapeEntities(bodyText, false)); 
    writer.close(); 
} catch(IOException e) { 
    //Do something 
    e.printStackTrace(); 
} 

Wenn Jsoup jedoch den Parsing-Prozess durchläuft, fügt es Tags für jede spitze Klammer gefolgt von Zeichen hinzu.

<p>1. <someUnicodeString></someUnicodeString></p> 
<p>2. <foo 2012.12.26.></foo></p> 
<p>3. <123 2012.12.26.></p> 
<p>4. <@ 2012.12.26.></p> 
<p>5. foobarbar</p> 

produzieren schließlich das Ergebnis

1. 
2. 
3. <123 2012.12.26.> 
4. <@ 2012.12.26.> 
5. asdasd 

Wie kann ich Jsoup von Löschwinkel-Klammern innerhalb Text zu verhindern, wenn das Parsen?

Oder gibt es eine Möglichkeit, Jsoup zu erkennen, dass bestimmte spitze Klammern keine HTML-Elemente sind? (vielleicht mit Regex?)

Ich bin neu in Jsoup und würde jede Art von Hilfe sehr zu schätzen wissen. Danke.

+0

Ihr HTML scheint nicht gültig. Bitte werfen Sie einen Blick auf [diese Antwort] (http://stackoverflow.com/a/10462413/1992780). –

+1

Vielen Dank für den Kommentar! Ich denke, ein guter Ausgangspunkt ist es, die Elemente zu durchlaufen und die "<" Zeichen im Text in "<" zu konvertieren, bevor ich mit der Analyse anfange. – Joon

Antwort

0

Dank den Kommentar von Davide Pastore, und der Frage „Right angle bracket in HTML

ich war in der Lage, das Problem mit dem folgenden Code zu lösen.

doc = Jsoup.parse(new File(path), "UTF-8"); 
//replace all left-angle tags inside <p> element to "&lt;" 
Elements pTags = doc.select("p"); 
for (Element tag : pTags) { 
    //change the boundary of the regex to whatever suits you 
    if (tag.html().matches("(.*)<[a-z](.*)")) { 
     String innerHTML = tag.html().replaceAll("<(?=[a-z])", "&lt;"); 
     tag.html(innerHTML); 
    } 
} 

Wenn Sie den Prozess durchlaufen von „<“ in Text zu konvertieren <, bevor Sie anfangen zu parsen, werden Sie in der Lage sein, die die richtige Ausgabe zu erhalten.

Verwandte Themen