Wenn Jsoup auf bestimmte HTML-Typen (entweder komplex oder inkorrekt) stößt, wird möglicherweise schlecht formatierter HTML-Code ausgegeben. Ein Beispiel ist:Wie kann Jsoup wohlgeformtes XML ausgeben?
<html>
<head>
<meta name="x" content="y is "bad" here">
</head>
<body/>
</html>
wo die Anführungszeichen hätten entkommen sein sollen. Wenn Jsoup dies analysiert, gibt es Folgendes aus:
<html>
<head>
<meta name="x" content="y is " bad"="" here"="" />
</head>
<body></body>
</html>
die nicht konform HTML oder XML ist. Dies ist problematisch, da es beim nächsten Parser in der Kette fehlschlägt.
Gibt es eine Möglichkeit, sicherzustellen, dass Jsoup entweder eine Fehlermeldung ausgibt oder (wie HtmlTidy) wohlgeformtes XML ausgeben kann, selbst wenn es einige Informationen verloren hat (schließlich können wir jetzt nicht sicher sein, was richtig ist).
UPDATE: Der Code, der nicht ist:
@Test
public void testJsoupParseMetaBad() {
String s = "<html><meta name=\"x\" content=\"y is \"bad\" here\"><body></html>";
Document doc = Jsoup.parse(s);
String ss = doc.toString();
Assert.assertEquals("<html> <head> <meta name=\"x\" content=\"y is \""
+" bad\"=\"\" here\"=\"\" /> </head> <body></body> </html>", ss);
}
Ich verwende:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.2</version>
</dependency>
Andere scheinen das gleiche Problem zu haben: JSoup - Quotations inside attributes Die Antwort gibt mir nicht helfen, Ich muss akzeptieren, was ich bekomme
Da jSoup ein DOM-Parser ist es sollte das nicht tun. Das Rekonstruieren des HTML-Textes von einem DOM kann nicht zu der Ausgabe führen, die Sie anzeigen (IMHO). Würden Sie ein Codebeispiel hinzufügen, das dieses Verhalten zeigt? – Tomalak
Ich stimme Ihrer Logik zu. Ich habe den Code hinzugefügt, den ich verwende, um den "HTML" oben zu analysieren. –
@Tomalak Wo heißt es, dass jSoup ein DOM-Parser ist (im Sinne von w3c)? Die lokalen Namen scheinen identisch zu sein, aber das ist alles. Nach einem kurzen Blick auf die Quelle erfordert die Korrektur wahrscheinlich Codeänderungen. –