【问题标题】:NSXMLParser parsing problem on PHP-generated XMLPHP生成的XML上的NSXMLParser解析问题
【发布时间】:2011-03-06 13:29:12
【问题描述】:

我使用 NSXMLParser 制作了一个解析器 iPhone 应用程序来解析 PHP 生成的 XML (http://raptor.hk/rta_handler.php?action=category),但没有返回结果。我尝试了几种方法,但仍然无法返回结果。

我不小心将 PHP 生成的 XML 保存到一个 XML 文件并重新上传到 Web 服务器 (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 中,为空

(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;

(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;
} 

(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;
} 

(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];
    }
}

(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 ......
?>

【问题讨论】:

    标签: php objective-c xml ios4 nsxmlparser


    【解决方案1】:

    如果您设法让它在服务器上的 XML 文件中正常工作,那么问题很可能出在 PHP 上。检查您是否将响应标头内容类型设置为 application/xml 或 text/xml。

    header('Content-Type: text/xml')
    

    【讨论】:

    • 我已经将标题设置为:Content-Type: text/xml;字符集=utf-8。您可以仔细检查页面信息。还是不行。
    • 嗯,奇怪。我能看到的唯一区别是您服务器上的 XML 文件正在返回 application/xml。也许试试 PHP 标头?会认为它不会有所作为,但值得一试!
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多