JSoup - Котировки внутри атрибутов - PullRequest
1 голос
/ 02 ноября 2011

Я использую JSoup для создания правильного XML из нескольких веб-сайтов.Большую часть времени он работал феноменально хорошо, но в последнее время я столкнулся с некоторыми случаями плохого HTML, который JSoup, похоже, не может исправить.

<meta name="saploTags" content="Tag1,Tag2,Tag3," Tag4,Tag5,Tag6"/> 

В результате

<meta name="saploTags" content="Tag1,Tag2,Tag3," tag4,tag5,tag6"="" />

Это вызывает проблемы позже, когда я пытаюсь проиндексировать полученный XML.У кого-нибудь есть предложения, что делать?Желательно, чтобы все, что находилось между самой левой и самой правой кавычками, было экранировано или удалено каким-либо образом, чтобы предотвратить потерю данных (например, content = "Tag1, Tag2, Tag3, Tag4, Tag5, Tag6". В противном случае было бы хорошо, если бы JSoupобрезать после его первой "конечной кавычки", игнорируя последние теги, такие как content = "Tag1, Tag2, Tag3".

(Подобные проблемы, которые я обнаружил, например <img src=".." alt="This text contains the quote "The quote" and here's some more text"/>, вызывают аналогичные проблемы)

Можно ли обойти это с помощью jsoup или я зашел в тупик?

/ С уважением, Магнус

1 Ответ

0 голосов
/ 02 ноября 2011

Это просто не допустимый ни XML, ни HTML.Эти двойные кавычки должны быть превращены в символьные ссылки, если они должны рассматриваться как часть значения атрибута.Даже если бы вы могли настроить синтаксический анализатор на очень мягкий режим, он не сможет решить эту проблему, поскольку уже неясно, где заканчивается содержимое атрибута.

Попытка автоматически исправить это кажется довольно сложной задачей.Есть множество угловых случаев, которые могут нанести ущерб любому решению.Как это должно быть истолковано, например:

<element attribute="this isn't "quite" the=correct way="to=" do things"" />

Посмотрите, как с этим борется средство форматирования кода SO.

Даже понять это самостоятельно сложно, не говоря уже о написании инструментав этом будет смысл того, что является атрибутом контента или нет.

Простой подход?Просто не принимайте недопустимый HTML.Это достаточно мягко, так как большинство синтаксических анализаторов допускают имена элементов в нижнем и верхнем регистре, закрывающие теги не всегда являются обязательными и т. Д. Если людям все еще удается генерировать недопустимый HTML, это слишком плохо для них.

...