Проблема синтаксического анализа NSXMLParser в XML, сгенерированном PHP

Я создал приложение-парсер для iPhone, используя NSXMLParser для анализа сгенерированного PHP XML (http://raptor.hk/rta_handler.php?action=category), но результат не вернулся. Я попробовал несколько методов, но все равно не могу вернуть результаты.

Я случайно сохранил сгенерированный PHP XML в файл XML и повторно загрузил на веб-сервер (http://raptor.hk/rta_handler.xml) и изменил NSXMLParser, приложение парсера работает и возвращает все, что мне нужно.

Проблема в том, что мне нужны функции PHP, чтобы сделать XML динамическим. Как я могу достичь этого? Мои NSXMLParser XML-коды следующие:

в функции парсера загрузки:

NSURL *xmlURL = [NSURL URLWithString:URL];
rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];

[rssParser setDelegate:self];
[rssParser setShouldProcessNamespaces:NO];
[rssParser setShouldReportNamespacePrefixes:NO];
[rssParser setShouldResolveExternalEntities:NO];
[rssParser parse];

в (void)parserDidStartDocument:(NSXMLParser *)parser пусто

in (void)parser:(NSXMLParser *)parser parseErrorOccured:(NSError *)parseError

NSString *errorString = [NSString stringWithFormat:@"Unable to download entries (ERR_CODE: %i)", [parseError code]];
NSLog(@"error parsing XML: %@", errorString);
UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading content" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
[errorAlert release];
errorAlert = nil;

in (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict,

currentElement = [elementName copy]; 
if ([elementName isEqualToString:@"category"]) { 
    // clear out our story item caches... 
    item = [[NSMutableDictionary alloc] init]; 
    self.currentTitle = [[NSMutableString alloc] init];
    self.currentID = 0;
} 

in (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName,

if ([elementName isEqualToString:@"category"]) {    
    [item setObject:self.currentTitle forKey:@"title"]; 
    [item setObject:[NSString stringWithFormat:@"%d", self.currentID] forKey:@"id"]; 
    [self.entries addObject:item]; 
    [item release];
    item = nil;
} 

in (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string,

NSString *trimmed = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ([currentElement isEqualToString:@"title"]) { 
    [self.currentTitle appendString:trimmed]; 
} else if([currentElement isEqualToString:@"id"]) {
    if(trimmed.length > 0) {
        self.currentID = [trimmed intValue];
    }
}

in (void)parserDidEndDocument:(NSXMLParser *)parser,

[tbl_categories reloadData];

в (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath некоторые несвязанные экспериментальные коды

Итак, есть ли проблема в моем коде? или в моем PHP-сгенерированном XML?

ОБНОВЛЕНИЕ: PHP-код, который я использовал

<?php
  require_once('wp-blog-header.php');
  // === XML Header ===
  header('Content-Type: text/xml; charset=utf-8');
  echo '<?xml version="1.0" encoding="utf-8" ?>' . "\n";
  // echo the XML contents here ......
?>

person Raptor    schedule 06.03.2011    source источник


Ответы (1)


Если вам удалось заставить его работать правильно с файлом XML на сервере, проблема, скорее всего, связана с PHP. Убедитесь, что вы устанавливаете тип содержимого заголовка ответа на application/xml или text/xml.

header('Content-Type: text/xml')
person Michael Waterfall    schedule 06.03.2011
comment
Я уже установил заголовок: Content-Type: text/xml; кодировка=utf-8. Вы можете дважды проверить информацию о странице. Тем не менее, это не работает. - person Raptor; 06.03.2011
comment
Хм странно. Единственная разница, которую я вижу, заключается в том, что файл XML на вашем сервере возвращает application/xml. Возможно, попробуйте это для заголовка PHP? Думал, что ничего не изменится, но попробовать стоит! - person Michael Waterfall; 06.03.2011