nsxmlparser中的“for”循环?如何安排.xml文件?

时间:2011-09-06 23:24:39

标签: for-loop nsxmlparser

让我们说这是我要解析的.xmi文件;

<?xml version="1.0" encoding="UTF-8"?>
<Albums>
<Album id="1">
<name>Images</name>
<link1>http://galeri.uludagsozluk.com/38/apple_36298.png</link1>
<link2>http://galeri.uludagsozluk.com/38/apple_36298.png</link2>
<link3>http://galeri.uludagsozluk.com/38/apple_36298.png</link3>
<link4>http://galeri.uludagsozluk.com/38/apple_36298.png</link4>
<link5>http://galeri.uludagsozluk.com/38/apple_36298.png</link5>    
</Album>
</Albums>

如何创建循环以为link1 link2 link3创建可变字符串,依此类推。我不希望受到链接数量的限制。所以循环肯定是必需的。

这是我的nsxmlparser代码;

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

    currentElement = [elementName copy];

    if ([elementName isEqualToString:@"Album"]) {
        album = [[NSMutableDictionary alloc] init];
        self.currentName = [[NSMutableString alloc] init];
        self.currentURL = [[NSMutableString alloc] init];
    }
     }

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString
*)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    if ([elementName isEqualToString:@"Album"]) {
        [album setObject:self.currentName forKey:@"name"];
        [album setObject:self.currentURL forKey:@"link1"];

        [albums addObject:[album copy]];
    } 
     }

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString
*)string{
    if ([currentElement isEqualToString:@"name"]) {
        [self.currentName appendString:string];
    } else if ([currentElement isEqualToString:@"link1"]) {
        [self.currentURL appendString:string];
    }  }

使用此解析器,我只能解析link1。但我应该为“link%@”创建一个循环,解析器应该自动解析我添加的所有链接。

或者你们建议一种更好的方法来解析某个元素下的多个链接?安排.xml文件的更好方法?我对新想法持开放态度。像:

<?xml version="1.0" encoding="UTF-8"?>
<Albums>
<Album id="1">
<name>Images</name>
<link id="1">http://galeri.uludagsozluk.com/38/apple_36298.png</link>
<link id="2">http://galeri.uludagsozluk.com/38/apple_36298.png</link>
<link id="3">http://galeri.uludagsozluk.com/38/apple_36298.png</link>
<link id="4">http://galeri.uludagsozluk.com/38/apple_36298.png</link>
<link id="5">http://galeri.uludagsozluk.com/38/apple_36298.png</link>    
</Album>
</Albums>

或者,上面的xml可能吗?

提前完成。

2 个答案:

答案 0 :(得分:0)

您需要创建一个仅运行5次的for循环。

包含<links />元素中的link-N元素。

<?xml version="1.0" encoding="UTF-8"?>
<Albums>
<Album id="1">
<name>Images</name>
<links>
    <link>http://galeri.uludagsozluk.com/38/apple_36298.png</link>
    <link>http://galeri.uludagsozluk.com/38/apple_36298.png</link>
    <link>http://galeri.uludagsozluk.com/38/apple_36298.png</link>
    <link>http://galeri.uludagsozluk.com/38/apple_36298.png</link>
    <link>http://galeri.uludagsozluk.com/38/apple_36298.png</link>    
</links>
</Album>
</Albums>

答案 1 :(得分:0)

我找到的最佳解决方案是componentseparatedbystring方法。如果只将一个链接添加到一个元素中,解析器会将其解析为nsstring,您可以从nsstring创建nsarray。很容易,我们可以在任何我们想要的地方使用这个数组。