NSXMLDocumentTidyHTML не убирает некоторые ошибки проверки XHTML - PullRequest
2 голосов
/ 23 июня 2009

Я хочу получить текст из списка веб-страниц. Я немного поэкспериментировал и обнаружил, что лучший способ удовлетворить мои потребности - использовать WebKit.

Как только источник страницы будет захвачен, я хочу удалить все HTML-теги, используя технику, описанную в этом комментарии.

Вот мой код:

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame {
    if(frame == [sender mainFrame]) {
        NSString *content = [[[[sender mainFrame] dataSource] representation] documentSource];
        NSXMLDocument *theDocument = [[NSXMLDocument alloc] initWithXMLString:content options:NSXMLDocumentTidyHTML error:&theError];
        NSString *theXSLTString = @"<?xml version='1.0' encoding='utf-8'?>\n<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:xhtml='http://www.w3.org/1999/xhtml'>\n<xsl:output method='text'/>\n<xsl:template match='xhtml:head'></xsl:template>\n<xsl:template match='xhtml:script'></xsl:template>\n</xsl:stylesheet>";
        NSData *theData = [theDocument objectByApplyingXSLTString:theXSLTString arguments:nil error:&theError];
        NSString *theString = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];
    }
}

Это прекрасно работает на большинстве страниц. Однако, если страница неверно проверяется как XHTML, я иногда получаю ошибку из моего initWithXMLString: метода.

Это достаточно справедливо - я прошу привести в порядок XHTML, поэтому я ожидаю, что он сообщит, с какими проблемами он столкнулся. Но если есть проблема с проверкой, она возвращает ноль и ошибку, а не приводит в порядок XHTML.

Одной конкретной страницей, вызывающей проблему, является документация по классу Ruby.

Я обнаружил, что превосходное стороннее HTML приложение может очистить этот XHTML-файл нормально, но я ожидаю, что NSXMLDocumentTidyHTML сможет просто добавить некоторые кавычки вокруг значений cellpadding. Это довольно простая операция очистки. И я не стремлюсь добавить еще одну зависимость в мою базу кода.

Я что-то упускаю из-за того, как Какао очищает XHTML? Или мне просто нужно прикусить пулю и использовать вместо этого HTML Tidy в моем коде?

1 Ответ

3 голосов
/ 23 июня 2009

XHTML-документы обрабатываются как XML, поэтому вам может повезти с флагом NSXMLDocumentTidyXML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...