解析XML项";类别“;进入一个与NSDictionary的NSArray 问题:
从.XSD模板生成的XML文件生成粘贴在下面的输出。由于解析XML项";类别“;进入一个与NSDictionary的NSArray 问题:,xml,ios,nsarray,nsdictionary,nsxmlparser,Xml,Ios,Nsarray,Nsdictionary,Nsxmlparser,从.XSD模板生成的XML文件生成粘贴在下面的输出。由于类别的键是图像,因此我解析图像项的标准方法对类别不起作用。我想将category name=“category#”放入一个数组,如何从category字段创建数组 我需要的是: 我想要的是一系列字典。每个位置包含一个表示一个类别的字典,每个字典包含该类别的图像 数组:@“1类”、“2类”、“3类” 对于每个数组,一个字典,其中包含:以及介于 基本上,我需要从XML数据源创建一个类似下图的plist XML输出: http://www.w
类别
的键是图像
,因此我解析图像
项的标准方法对类别
不起作用。我想将category name=“category#”
放入一个数组,如何从category字段创建数组
我需要的是:
我想要的是一系列字典。每个位置包含一个表示一个类别的字典,每个字典包含该类别的图像
数组:@“1类”、“2类”、“3类”代码>
对于每个数组,一个字典,其中包含:
以及介于
基本上,我需要从XML数据源创建一个类似下图的plist
XML输出:
http://www.wrightscs.com
标题
http://www.wrightscs.com
http://www.wrightscs.com
http://www.wrightscs.com
这些物品/钥匙不是问题。
http://www.wrightscs.com
http://www.wrightscs.com
http://www.wrightscs.com
标题
http://www.wrightscs.com
http://www.wrightscs.com
http://www.wrightscs.com
这些物品/钥匙不是问题。
http://www.wrightscs.com
http://www.wrightscs.com
http://www.wrightscs.com
标题
http://www.wrightscs.com
http://www.wrightscs.com
http://www.wrightscs.com
这些物品/钥匙不是问题。
http://www.wrightscs.com
http://www.wrightscs.com
http://www.wrightscs.com
注意:其他项/键都不是问题,我只对将类别设置为数组感兴趣。本例中的URL也由原始内容替换而来。看看xpath和以下内容:
在本例中,您需要的xpath是
//类别/@name
使用上面提到的库时,应该返回数组中的类别名称
有关更多xpath语法,请检查以下内容:解决方案:
我不太喜欢hpple,但我修改了我的问题。你的标题表明你的问题已经得到了回答,解决方案是什么?@Nick感谢你在这里发布它。它保持整洁。
<?xml version="1.0" encoding="UTF-8"?>
<app xmlns="http://www.wrightscs.com/_xml_.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wrightscs.com/_xml_.xsd" name="Testing" unlock_product_id="com.wrightscs.all">
<bannerImg>http://www.wrightscs.com</bannerImg>
<category name="Category 1" icon="http://www.wrightscs.com">
<image>
<title>title</title>
<thumbUrl>http://www.wrightscs.com</thumbUrl>
<sampleUrl>http://www.wrightscs.com</sampleUrl>
<imageUrl>http://www.wrightscs.com</imageUrl>
<description>These items / keys not an issue.</description>
<infoUrl>http://www.wrightscs.com</infoUrl>
<license>http://www.wrightscs.com</license>
<licenseUrl>http://www.wrightscs.com</licenseUrl>
</image>
</category>
<category name="Category 2" icon="http://www.wrightscs.com">
<image>
<title>title</title>
<thumbUrl>http://www.wrightscs.com</thumbUrl>
<sampleUrl>http://www.wrightscs.com</sampleUrl>
<imageUrl>http://www.wrightscs.com</imageUrl>
<description>These items / keys not an issue.</description>
<infoUrl>http://www.wrightscs.com</infoUrl>
<license>http://www.wrightscs.com</license>
<licenseUrl>http://www.wrightscs.com</licenseUrl>
</image>
</category>
<category name="Category 3" icon="http://www.wrightscs.com">
<image>
<title>title</title>
<thumbUrl>http://www.wrightscs.com</thumbUrl>
<sampleUrl>http://www.wrightscs.com</sampleUrl>
<imageUrl>http://www.wrightscs.com</imageUrl>
<description>These items / keys not an issue.</description>
<infoUrl>http://www.wrightscs.com</infoUrl>
<license>http://www.wrightscs.com</license>
<licenseUrl>http://www.wrightscs.com</licenseUrl>
</image>
</category>
</app>
#pragma mark -
#pragma mark Delegate Received
-(void)parsingComplete:(XMLDataSource*)theParser {
NSArray *categoryArray = [theParser getCategories];
[categoryArray writeToFile:PLIST atomically:YES];
}
- (void)receivedItems:(NSArray *)theItems {
NSMutableArray *dataItems = [[NSMutableArray alloc] init];
[dataItems addObjectsFromArray:[NSArray arrayWithContentsOfFile:PLIST]];
NSDictionary * dataItem = [dataItems objectAtIndex:categoryIndex];
data_ = [dataItem objectForKey:@"images"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"updateThumbs" object:nil];
}
#pragma mark -
#pragma mark Parsing Delegates
- (void)parse:(NSData *)data withDelegate:(id)sender onComplete:(SEL)callback
{
parentDelegate = sender;
onCompleteCallback = callback;
loading = YES;
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
}
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
parsed = NO;
loading = NO;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
NSString *element = [elementName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
currentElement = element;
if ([[currentElement lowercaseString] isEqual:@"image"]) {
inImage = YES;
itemsDictionary = [[NSMutableDictionary alloc] init];
[itemsDictionary addEntriesFromDictionary:attributeDict];
}
if ([[currentElement lowercaseString] isEqual:@"category"]) {
inCategory = YES;
categoryDictionary = [[NSMutableDictionary alloc] init];
[categoryDictionary addEntriesFromDictionary:attributeDict];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
NSString *element = [elementName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ([[element lowercaseString] isEqual:@"image"]) {
inImage = NO;
[items addObject:[itemsDictionary copy]];
}
if ([[element lowercaseString] isEqual:@"category"]) {
inCategory = NO;
[categoryDictionary setObject:[items copy] forKey:@"images"];
[items removeAllObjects];
[categories addObject:[categoryDictionary copy]];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
NSString *stringValue = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString *element = [currentElement stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
/* skip over blank elements. */
if (stringValue == nil || [stringValue isEqual:@""]) {
return;
}
if (element != nil && [element length] > 0) {
if (inImage) {
if ([itemsDictionary objectForKey:element] != nil) {
[itemsDictionary setObject:[NSString stringWithFormat:@"%@%@", [itemsDictionary objectForKey:element], stringValue]
forKey:element];
} else {
[itemsDictionary setObject:stringValue forKey:element];
}
} else if ((!inImage) && (inCategory)) {
if ([categoryDictionary objectForKey:element] != nil) {
[categoryDictionary setObject:[NSString stringWithFormat:@"%@%@", [categoryDictionary objectForKey:element], stringValue]
forKey:element];
} else {
[categoryDictionary setObject:stringValue forKey:element];
}
} else {
if ([root objectForKey:element] != nil) {
[root setObject:stringValue forKey:element];
}
}
}
}
- (void)parserDidStartDocument:(NSXMLParser *)parser {
NSError * err;
if(![[NSFileManager defaultManager] fileExistsAtPath:PLIST]) {
[[NSFileManager defaultManager] removeItemAtPath:PLIST error:&err];
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
parsed = YES;
loading = NO;
if ([parentDelegate respondsToSelector:onCompleteCallback]) {
[parentDelegate performSelector:onCompleteCallback withObject:self];
}
if ([self respondsToSelector:@selector(receivedItems:)])
[self receivedItems:items];
else
SHOW_ALERT(@"parserDidEndDocument:", @"receivedItems: not responding!", nil, @"Okay", nil)
}
#pragma mark -
#pragma mark Setters / Getters
- (id)delegate {
return self;
}
- (void)setDelegate:(id)new_delegate {
_delegate = self;
}
- (BOOL)isSuccessful {
return success;
}
- (BOOL)isLoading {
return loading;
}
- (BOOL)isParsed {
return parsed;
}
- (NSArray *)getCategories {
return categories;
}
- (NSDictionary *)getRoot {
return root;
}
- (void)dealloc {
[super dealloc];
}