0

私が見たすべてのチュートリアルにもかかわらず、NSXMLParserの使用方法を理解するのにいくつかの困難があります...

たとえば、次の XML ファイルがあります。

<rss>
<channel>
<title>The Title</title>
<link>A URL</link>
<language>English</language>
<item>
    <name>John</name>
    <title>John4034</title>
    <city>LA</city>
    <country>USA</country>
</item>
....
<item>
    <name>Marc</name>
    <title>Marc2942</title>
    <city>London</city>
    <country>England</country>
</item>
</channel>
</rss>

Item の NSMutableArray にすべてのアイテムをストックすることを目指しています。私のクラス Item には 4 つの NSString (名前、タイトル、都市、国) があります。

ここに私の XMLParser.m ファイルがあります:

- (id) loadXMLbyURL : (NSString *) urlString
{
    items = [[NSMutableArray alloc] init];
    NSURL *url = [NSURL URLWithString:urlString];
    NSData *data = [NSData dataWithContentsOfURL:url];
    parser = [[NSXMLParser alloc] initWithData:data];
    parser.delegate = self;
    [parser parse];
    return self;
}

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if([elementName isEqualToString:@"item"]) currentItem = [Item alloc];
}

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if([elementName isEqualToString:@"name"]) [currentItem setName:currentNodeContent];
    if([elementName isEqualToString:@"title"]) [currentItem setTitle:currentNodeContent];
    if([elementName isEqualToString:@"city"]) [currentItem setCity:currentNodeContent];
    if([elementName isEqualToString:@"country"]) [currentItem setCountry:currentNodeContent];
    }
    if([elementName isEqualToString:@"item"])
    {
        [self.items addObject:currentItem];
        currentItem = nil;
        currentNodeContent = nil;
    }
}

しかし、これには2つの問題があります:

  • アイテムの配列には 108 個のインデックスしか含まれていませんが、XML ファイルには 299 個のインデックスが含まれています。
  • アイテムのプロパティにデータがありません... ログに出力しようとすると、すべてが (null) になります。

助けてください !

4

1 に答える 1

0

誰かが同じ問題を抱えているなら、私はついに解決策を見つけました。

于 2012-05-28T15:56:06.710 に答える