NSXMLParser работает некорректно с такими символами, как « - PullRequest
0 голосов
/ 22 апреля 2011

У меня проблемы с анализом xml в приложении для iPhone. Вот некоторая часть XML-кода, которую я хочу проанализировать с помощью стандартного NSXMLParser синтаксического анализатора.

<item>
<title>AMNews: Facebook & Twitter Updates Might Lead To Burglary, Oldham School Violates DPA, Amazon Cloud “Burstsâ€</title>
<link>http://www.itproportal.com/2011/04/22/amnews-facebook-twitter-updates-might-lead-to-burglary-oldham-school-violates-dpa-amazon-cloud-bursts/</link>
<description>People announcing their holiday plans on social networking platforms like Facebook and Twitter are putting themselves at risks from thieves and burglars. A new study ha</description>
<author>ravimandalia@itproportal.com (Ravi Mandalia)</author>
<pubDate>Fri, 22 Apr 2011 08:19:36 +0100</pubDate>
<guid>http://cdn.itproportal.com/photos/facebook-logo-4_thumb80x80.png</guid>
</item>

Как вы можете видеть в

<title>AMNews: Facebook & Twitter Updates Might Lead To Burglary, Oldham School Violates DPA, Amazon Cloud “Burstsâ€</title>

тег заголовка появляются некоторые странные символы " â * œ " " â ". В функции

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;

Я пытаюсь получить заголовок и сохранить его, но мой анализатор работает неправильно. Парсер принимает только текст после символа " â € œ " !!!

Что я могу сделать, и кто-нибудь может сказать мне, что происходит с разбором? Большое спасибо !!!

Ответы [ 2 ]

1 голос
/ 22 апреля 2011

Можете ли вы показать нам вашу реализацию -parser:foundCharacters:?Как вы храните string?

Я также однажды использовал NSXMLParser со специальными символами в файле XML, и он работал без проблем.

0 голосов
/ 22 апреля 2011

Вот реализация -parser:foundCharacters:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    //in case of unusable tags
    if (currentArticle == nil) {
        return;
    }
    // Get Title.   
    if ([currentElement isEqualToString:@"title"]) {
        [self.currentArticle setTheTitle:string];
    // Get Description.
    } else if ([currentElement isEqualToString:@"description"]) {
        string = [string stringByReplacingOccurrencesOfString: @"\n" withString: @"" ];
        [self.currentArticle setTheSummary:string];

    } else if ([currentElement isEqualToString:@"link"]) {
        [self.currentArticle setTheMainLink:string];

    } else if([currentElement isEqualToString:@"guid"]){
        [self.currentArticle setTheImageLink:string];

    } else if ([currentElement isEqualToString:@"pubDate"]) {
        [self.currentArticle setThePubDate:string];

    } else if([currentElement isEqualToString:@"author"]){
        [self.currentArticle  setTheAuthor:string];
    }
}

Я заметил, что парсер получает заголовок два раза в первый раз от начала до второго и от конца до конца. Как и в моей ленте есть два тега title .

...