【发布时间】: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