Соскребание HTML в iOS - PullRequest
       11

Соскребание HTML в iOS

1 голос
/ 03 марта 2012

Итак, у меня есть некоторый текст HTML, который я хотел бы отобразить в табличном представлении.

У меня есть две ячейки UITableView. Ячейка с кавычками и ячейка без кавычек.

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

Другими словами, следующий html:

<div class='comment'>
     This is some text before the quote
     <div class='quote'>
         This is some text in a quote
     </div>
     This is between the quotes
     <div class='quote'>
             This is text in another quote
         <div class='unrelatedDiv'>
             this is in an unrelated div
         </div>
     </div>
      This is some text after the quote
</div> 

Будет выглядеть примерно так в массиве, когда закончите. Затем он будет загружен в мой tableView, который будет знать, что есть 5 разделов и что 1 и 3 должны быть кавычками.

[0] => "This is some text before the quote"
[1] => "This is some text in a quote"
[2] => "This is between the quotes"
[3] => "This is text in another quote \n this is in an unrelated div"
[4] => "This is some text after the quote"

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Я бы использовал для этого DTHTMLParser из проекта DTCoreText . Это оболочка Objective-C для libxml2.

Для вашего примера HTML вы увидите вызовы делегатов, подобные этим, в порядке их появления:

2012-03-13 didStartElement: атрибуты div: {class = comment; } * +1010 *

2012-03-13 foundCharacters: Это текст перед цитатой

2012-03-13 didStartElement: атрибуты div: {class = quote; }

2012-03-13 foundCharacters: Это какой-то текст в цитате

2012-03-13 didEndElement: div

2012-03-13 foundCharacters: это между кавычками

2012-03-13 didStartElement: атрибуты div: {class = quote; }

2012-03-13 foundCharacters: Это текст в другой цитате

2012-03-13 didStartElement: атрибуты div: {class = unrelatedDiv; }

2012-03-13 foundCharacters: это не связанный div

2012-03-13 didEndElement: div

2012-03-13 найденоCharacters:

2012-03-13 didEndElement: div

2012-03-13 foundCharacters: Это какой-то текст после цитаты

2012-03-13 didEndElement: div

Таким образом, вы можете просто использовать [DTHTMLParser parser:foundCharacters:] метод делегата.

0 голосов
/ 16 марта 2012

Вы можете просто использовать NSXMLParser (HTML - это своего рода XML)

Объявить класс делегата с NSXMLParserDelegate

@interface myHTMLReader : NSObject <NSXMLParserDelegate> 

Реализовать методы анализа в вашем классе делегата

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    [myMutableString setString:@""];
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    [myMutableString appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    [myTable addObject:[myMutableString copy]];
}

И начинай свой разбор.

NSXMLParser * parser  = [[NSXMLParser alloc] initWithData:htmlData];
[parser setDelegate:self];
[parser parse]; 
[parser release];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...