2010-10-07 2 views
2

Я использую эту библиотеку: http://benreeves.co.uk/objective-c-hmtl-parser/ для анализа HTML для небольшого приложения для iPhone, которое я делаю. У меня есть код, работающий до сих пор, но он терпит неудачу, когда ему предоставляется акцент (пока только опытный é). Это код, который я использую:HTML Parsing терпит неудачу с акцентированными буквами (например: é)

NSError * error = nil; 
HTMLParser * parser = [[HTMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://intranet.westminster.org.uk/almanack/food.asp?nextweek=TRUE"] error:&error]; 

if (error) { 
    NSLog(@"Error: %@", error); 
    return nil; 
} 
HTMLNode * bodyNode = [parser body]; //Find the body tag 
NSArray *individualMeals = [bodyNode findChildTags:@"font"]; 
for (HTMLNode *node in individualMeals) { 
    if ([[node getAttributeNamed:@"color"] isEqual:@"green"]) { 
     NSLog(@"%@",[node rawContents]); 
    } 
} 

Но он не анализирует весь текст. Кажется, что он сдался после того, как он нашел акцент в URL-адресе. Это результат производит при запуске:

2010-10-07 18:40:59.296 Westminster[1011:207] <font color="green"/> 
2010-10-07 18:40:59.298 Westminster[1011:207] <font color="green"/> 
2010-10-07 18:40:59.305 Westminster[1011:207] <font color="green"/> 
2010-10-07 18:40:59.307 Westminster[1011:207] <font color="green"/> 
2010-10-07 18:40:59.308 Westminster[1011:207] <font color="green">Sausage &#13;<br/>Bacon&#13;<br/>Hash Brown&#13;<br/>Baked Beans&#13;<br/>Breakfast special&#13;<br/>Three cheese omelets&#13;<br/><br/><br/>Plain Porridge &#13;<br/><br/><br/><br/>Croissants &#13;<br/><br/> Natural Yogurt&#13;<br/>Dried Fruits &#13;<br/>Granola&#13;<br/>Honey</font> 
2010-10-07 18:40:59.309 Westminster[1011:207] <font color="green">Mulligatawny &#13;<br/>Black Olive &#13;<br/>RICE&#13;<br/>Roasted med veg in paella rice&#13;<br/>Hot and sticky wings on yellow rice&#13;<br/>Hoi Sin Pork Belly Steaks&#13;<br/>Vegetable Biriyani with a Mild Curry Sauce&#13;<br/>Babycorn Bamboo Shoots and Water Chestnuts &#13;<br/>Stir fried noodles with seaweed &#13;<br/>Lemon Sponge with Orange Sauce&#13;<br/>Vanilla Granola</font> 
2010-10-07 18:40:59.310 Westminster[1011:207] <font color="green"/> 
2010-10-07 18:40:59.312 Westminster[1011:207] <font color="green">Pea &amp; Ham &#13;<br/><br/>Black Olive &#13;<br/>Roast Chicken with Bread Sauce and Roast Jus&#13;<br/>Warm Salad of Salmon and Crispy Bacon&#13;<br/><br/><br/>Vegetarian Chilli&#13;<br/>With Sour Cream and Braised Rice&#13;<br/>Green Beans&#13;<br/><br/>Bubble &amp; Squeak&#13;<br/><br/>Tiramisu&#13;<br/>3 Cheeses &amp; Biscuits</font> 
2010-10-07 18:40:59.313 Westminster[1011:207] <font color="green">Sausage&#13;<br/>Bacon&#13;<br/>Grilled Tomato&#13;<br/>Grilled mushrooms&#13;<br/>Fried Egg&#13;<br/><br/><br/><br/>Plain Porridge&#13;<br/><br/><br/><br/>Bread &#13;<br/><br/>Natural Yogurt&#13;<br/>Dried Fruits &#13;<br/>Granola&#13;<br/>Honey</font> 
2010-10-07 18:40:59.317 Westminster[1011:207] <font color="green">Root Vegetable&#13;<br/>Red Pesto &#13;<br/>WRAP&#13;<br/>Chimichanga&#13;&#13;<br/>Mexican fish tortillas&#13;&#13;<br/>Roast Leg of Lamb &#13;<br/>Gnocchi with Roasted Vegetables and Flaked Parmesan &#13;<br/>Broccoli &#13;<br/><br/><br/>Thyme Roasted Potatoes &#13;<br/> Sticky Toffee Pudding and Toffee Sauce&#13;<br/>Banana Bread</font> 
2010-10-07 18:40:59.318 Westminster[1011:207] <font color="green"/> 
2010-10-07 18:40:59.318 Westminster[1011:207] <font color="green">Tomato with Basil Oil&#13;&#13;<br/>Red Pesto &#13;<br/>Beef Olives&#13;<br/><br/>Lamb with Ginger, Spring onion and Noodles&#13;<br/><br/><br/>Field Mushroom Pies&#13;&#13;<br/>Ratatouille &#13;<br/><br/>Creamed Potatoes&#13;<br/><br/>Lemon Tart&#13;<br/>3 Cheeses &amp; Biscuits</font> 
2010-10-07 18:40:59.319 Westminster[1011:207] <font color="green">Sausage &#13;<br/>Bacon&#13;<br/>Baked Beans&#13;<br/>Grilled Tomato&#13;<br/>Breakfast special&#13;<br/>Avocado on toast&#13;<br/><br/>Plain Porridge &#13;<br/><br/><br/>Bread and banana bread&#13;<br/><br/>Natural Yogurt&#13;<br/>Dried Fruits &#13;<br/>Granola&#13;<br/>Honey</font> 
2010-10-07 18:40:59.333 Westminster[1011:207] <font color="green">(GREEK)&#13;<br/><br/>FLAT BREADS&#13;<br/>SPINACH, ROCKET AND FETA AND TOASTED SOUR DOUGHS &#13;<br/>SEAFOOD STUFFED PEPPERS&#13;<br/>STIFADO (beef)&#13;<br/><br/>LAMB FRICASSEE&#13;<br/>zucchini pie from Macedonia&#13;&#13;<br/>RICE&#13;<br/><br/>GIGANTIS PLAKI&#13;<br/><br/>ORANGE AND LEMON CAKE TOPPED WITH GREEK YOGURT AND HONEY</font> 
2010-10-07 18:40:59.333 Westminster[1011:207] <font color="green"/> 
2010-10-07 18:40:59.334 Westminster[1011:207] <font color="green">Roasted Vegetable&#13;<br/>FLAT BREADS&#13;<br/>Pork Steak Served with a Tomato, Tarragon and Mushroom sauce&#13;<br/>Roast beef and homemade horseradish sauce&#13;<br/><br/><br/>Lancashire Cheese Sausages with Onion Gravy&#13;&#13;<br/>Courgettes&#13;<br/><br/>Roast Potatoes&#13;<br/><br/>Mississippi Mud Pie&#13;<br/>3 Cheeses &amp; Biscuits</font> 
2010-10-07 18:40:59.343 Westminster[1011:207] <font color="green">Sausage&#13;<br/>Bacon &#13;<br/>Hash Brown&#13;<br/>Grilled mushrooms&#13;<br/>Fried Egg&#13;<br/><br/><br/><br/>Plain Porridge &#13;<br/><br/><br/><br/>Bread &#13;<br/><br/> Natural Yogurt&#13;<br/>Dried Fruits &#13;<br/>Granola&#13;<br/>Honey</font> 
2010-10-07 18:40:59.344 Westminster[1011:207] <font color="green">Leek, Blue Cheese and Potato &#13;&#13;<br/>Sunflower Seed&#13;<br/>COUS COUS&#13;<br/>Couscous with apricots, lemon and coriander &#13;<br/><br/>Couscous fried chicken with couscous and spiced tomato sauce &#13;&#13;<br/>Butchers Sausages &#13;<br/>Balsamic Roasted Vegetable Frittata&#13;<br/>Red Cabbage&#13;<br/><br/><br/>Mashed Potatoes&#13;<br/><br/>Jam Roly Poly &#13;<br/>Bakewell Slice</font> 
2010-10-07 18:40:59.344 Westminster[1011:207] <font color="green"/> 
2010-10-07 18:40:59.345 Westminster[1011:207] <font color="green">Curried Parsnip and Apple &#13;&#13;<br/>Sunflower Seed&#13;<br/>Spiced Sticky chicken pieces&#13;<br/>Mexican Beef Chilli Wraps with Natural Yogurt and Guacamole&#13;<br/><br/><br/>Roasted Teriyaki Tofu Steaks with Glazed Green Vegetables&#13;&#13;<br/>Spiced Aubergine&#13;<br/><br/>Rice and Peas&#13;<br/><br/>Mango Mousse&#13;<br/>3 Cheeses &amp; Biscuits</font> 
2010-10-07 18:40:59.351 Westminster[1011:207] <font color="green">Sausage&#13;<br/>Bacon&#13;<br/>Baked Beans&#13;<br/>Grilled Tomato&#13;<br/>Breakfast special&#13;<br/>Muffin bar&#13;<br/><br/>Plain Porridge&#13;<br/><br/><br/><br/>Croissants &#13;<br/><br/>Natural Yogurt&#13;<br/>Dried Fruits &#13;<br/>Granola&#13;<br/>Honey</font> 
2010-10-07 18:40:59.352 Westminster[1011:207] <font color="green">Carrot and Chilli &#13;&#13;<br/>Rosemary &#13;<br/>NOODLES&#13;<br/><br/>Crispy tofu&#13;<br/>Lemon chicken&#13;<br/>Fish with Traditional Crispy Batter&#13;<br/>Japanese Vegetable Curry with Rice Noodles and Tofu&#13;&#13;<br/>Garden peas&#13;<br/><br/><br/>Chips &#13;<br/>Viennese Jam Tart and Custard &#13;<br/>Fresh Fruit Salad</font> 
2010-10-07 18:40:59.361 Westminster[1011:207] <font color="green"/> 
2010-10-07 18:40:59.361 Westminster[1011:207] <font color="green">Three onion, spring, red and white&#13;<br/>Rosemary &#13;<br/>Pepperoni Pizza Topped with Boccaccio&#13;<br/>Bolognaise pasta bake&#13;<br/><br/>Vegetarian Plait&#13;&#13;<br/>Green Cabbage&#13;<br/><br/>Oven Baked Cajun Wedges&#13;<br/><br/>Ice&#13;<br/>Cream Sundae&#13;<br/><br/>3 Cheeses &amp; Biscuits</font> 
2010-10-07 18:40:59.362 Westminster[1011:207] <font color="green">Sausage &#13;<br/>Bacon &#13;<br/>Hash Brown&#13;<br/>Grilled Mushrooms&#13;<br/>Poached Eggs&#13;<br/><br/><br/><br/>Plain Porridge &#13;<br/><br/><br/><br/><br/><br/>Natural Yogurt&#13;<br/>Dried Fruits &#13;<br/>Granola&#13;<br/>Honey</font> 
2010-10-07 18:40:59.362 Westminster[1011:207] (null) 
2010-10-07 18:40:59.363 Westminster[1011:207] <font color="green"/> 
2010-10-07 18:40:59.363 Westminster[1011:207] <font color="green"/> 

Это дает вверх на участке с обжаренным картофелем, и не возвращает никаких результатов от этого или любого из последних разделов.

Я думаю, что это может быть связано с тем, что веб-сайт не закодировал és. Когда я смотрю на источник, я вижу é вместо & eacute; (без пробела, иначе SO форматирует его ...), как предлагается на этом сайте: http://www.w3.org/MarkUp/html3/latin1.html

Спасибо за ваше время. Если вы знаете лучший способ получить что-нибудь на обед с этого веб-сайта, я бы тоже хотел его услышать.

ответ

0

У меня была аналогичная проблема. Проблема в том, что libxml2 может анализировать только кодированный UTF8 документ. Поэтому вам сначала нужно преобразовать html-страницу в UTF8.

+0

Ах. Я сделал это сейчас. Я прочитал данные как формат ISO Latin 1, затем я заменил все экземпляры é html-кодом, а затем отправил его в парсер. –

+0

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

0

Я просто попробовал это. Я бы не использовать метод initWithContentsOfURL но вместо метода initWithData в методе делегата connectionDidFinishLoading, например

HTMLParser * parser = [[HTMLParser alloc] initWithData:receivedData error:&error]; 

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