Почему NSXMLDocumentTidyHTML игнорируется при создании NSXMLDocument длиной менее 12 символов?

Я использую NSXMLDocument с NSXMLDocumentTidyHTML Возможность разбора потенциально "неопрятного" HTML. Это работало хорошо в каждом сценарии, который я тестировал, если только строка, в которую я прошел NSXMLDocument"s -initWithXMLString:options:error: менее 12 символов.

Чтобы продемонстрировать проблему, рассмотрим тривиальный пример в следующих двух строках кода:

NSXMLDocument *document = [[NSXMLDocument alloc] initWithXMLString:@"<p>Hello</p>" options:NSXMLDocumentTidyHTML error:NULL];
NSLog(@"%@", [document XMLStringWithOptions:NSXMLNodePrettyPrint]);

Это выводит на консоль следующее:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    </head>
    <body>
        <p>Hello</p>
    </body>
</html>

Вся передаваемая строка была 12 символов (<p>Hello</p>), и хотя это всего лишь демонстрация, выходные данные, как я и ожидал: HTML-документ с пустым заголовком и тегом абзаца внутри тела.

Однако удалите один символ из этой строки (<p>Helo</p>например), и результат резко меняется, как будто NSXMLDocumentTidyHTML не был указан как опция:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<p>Helo</p>

Я проверил это с большим количеством строк различной длины и с разными тегами (<tr>123</tr> против <tr>12</tr>например) и испытывают ту же проблему. Кто-нибудь есть какие-либо предложения о том, почему это не будет производить HTML, который я ожидал бы при предоставлении строки длиной менее 12 символов?

0 ответов

Другие вопросы по тегам