Когда Jsoup сталкивается с определенными типами HTML (сложными или неправильными), он может издавать плохо сформированный HTML-код. Примером может служить:Как может Jsoup выводить хорошо сформированный XML?
<html>
<head>
<meta name="x" content="y is "bad" here">
</head>
<body/>
</html>
где цитаты должны были быть экранированы. Когда Jsoup анализирует это, он испускает:
<html>
<head>
<meta name="x" content="y is " bad"="" here"="" />
</head>
<body></body>
</html>
который не соответствует HTML или XML. Это проблематично, так как это не сработает при следующем синтаксическом анализаторе по цепочке.
Есть ли способ гарантировать, что Jsoup либо выдает сообщение об ошибке, либо (например, HtmlTidy) может выводить хорошо сформированный XML, даже если он потерял некоторую информацию (ведь мы не можем теперь точно знать, что правильно).
UPDATE: Код, который не удается это:
@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);
}
Я использую:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.2</version>
</dependency>
Другие, кажется, имеют те же проблемы: JSoup - Quotations inside attributes Ответ здесь не поможет мне Я должен принять то, что мне дано
Поскольку jSoup является DOM-парсер это не следует делать этого. Восстановление HTML-текста из DOM не может привести к выходу (IMHO). Вы включили бы образец кода, который показывает это поведение? – Tomalak
Я согласен с вашей логикой. Я добавил код, который я использую для анализа «HTML» выше. –
@Tomalak Где говорится, что jSoup является парсером DOM (в смысле w3c)? Местные имена кажутся одинаковыми, но это все. После быстрого взгляда на источник, исправление этого, вероятно, требует изменения кода. –