2012-03-03 3 views
1

Итак, у меня есть текст HTML, который я хотел бы отображать в tableView.Очистка HTML в iOS

У меня есть две ячейки 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" 
+0

Я пробовал lib2XML XPath, однако проблема связана с xpathing для цитаты, которая получает мне содержание цитаты, однако она не говорит мне, где разбить сообщение. EG 0,2,4 сверху должны быть в одной строке. Прямо сейчас, я думаю, что я собираюсь пройти через него. NSXMLParser или что-то на основе sax – endy

+0

NSXMLParser терпит неудачу, если кто-то опубликовал символ не-ascii. – endy

ответ

1

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

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

2012-03-13 didStartElement: ДИВ атрибуты: {класс = комментарий; }

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

2012-03-13 didStartElement: атрибуты DIV: {класс = котировке; }

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

2012-03-13 didEndElement: ДИВ

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

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

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

2012-03-13 didStartElement: ДИВ атрибуты: {класс = unrelatedDiv; }

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

2012-03-13 didEndElement: ДИВ

2012-03-13 foundCharacters:

2012-03-13 didEndElement: ДИВ

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

2012-03-13 didEndElement: ДИВ

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

+0

Love DTCoreText, и я действительно уже включил его в свой проект. Тем не менее, я решил просто пойти с использованием NSScanner и пройти свой путь через файл таким образом. До сих пор этот подход работает нормально. Но его замечательно знать, что текст dtcore имеет это. Я даже не знал об этом. Благодарю. – endy

-1

Вы можете просто использовать 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]; 
Смежные вопросы