Ich habe eine Datei xml wie folgt aus:IOS: NSMXLParser mit mehreren Knoten
<data>
<first>
<city>
city
</city>
<people>
400
</people>
</first>
<size>
<width>
340
</width>
<height>
120
</height>
</size>
<description>
<temp>
sunny
</temp>
<people>
45
</people>
</description>
<description>
<temp>
cloudy
</temp>
<people>
90
</people>
</description>
ich für das Parsen von diesen Code verwenden:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
currentElement = [elementName copy];
if ([elementName isEqualToString:@"first"]) {
firstType = [[NSMutableDictionary alloc] init];
currentCity = [[NSMutableString alloc] init];
currentPeople = [[NSMutableString alloc] init];
}
if ([elementName isEqualToString:@"size"]){
currentSize = [[NSMutableDictionary alloc] init];
width = [[NSMutableString alloc]init];
height = [[NSMutableString alloc]init];
}
if ([elementName isEqualToString:@"description"]){
desc1 = [[NSMutableDictionary alloc] init];
temp1 = [[NSMutableString alloc]init];
people1 = [[NSMutableString alloc]init];
}
if ([elementName isEqualToString:@"description"]){
desc2 = [[NSMutableDictionary alloc] init];
temp2 = [[NSMutableString alloc]init];
people2 = [[NSMutableString alloc]init];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"first"]) {
[firstType setObject:currentType forKey:@"city"];
[firstType setObject:currentQuery forKey:@"people"];
[feed addObject:[firstType copy]];
}
if ([elementName isEqualToString:@"size"]){
[currentSize setObject:tempC forKey:@"width"];
[currentSize setObject:tempF forKey:@"height"];
[feed addObject:[currentSize copy]];
}
if ([elementName isEqualToString:@"description"]){
[desc1 setObject:temp1 forKey:@"temp1"];
[desc1 setObject:people1 forKey:@"people1"];
[feed addObject:[desc1 copy]];
}
if ([elementName isEqualToString:@"description"]){
[desc2 setObject:temp1 forKey:@"temp2"];
[desc2 setObject:people1 forKey:@"people2"];
[feed addObject:[desc2 copy]];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
NSLog(@"found");
if ([currentElement isEqualToString:@"city"]){
[currentCity appendString:string];
}
else if ([currentElement isEqualToString:@"people"]) {
[currentPeople appendString:string];
}
else if ([currentElement isEqualToString:@"width"]){
[width appendString:string];
}
else if ([currentElement isEqualToString:@"height"]){
[height appendString:string];
}
else if ([currentElement isEqualToString:@"temp"]){
[temp1 appendString:string];
}
else if ([currentElement isEqualToString:@"temp"]){
[temp2 appendString:string];
}
else if ([currentElement isEqualToString:@"people"]){
[people1 appendString:string];
}
else if ([currentElement isEqualToString:@"people"]){
[people2 appendString:string];
}
}
- (void) parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@"feed:%@",feed);
}
das Ergebnis NSLog ist:
feed:(
{
city = city;
people = 4004590;
},
{
width = 340;
height = 120;
},
{
temp = sunny;
people = "";
},
{ ///???? here there is an empty space
},
{
temp = cloudy;
people = "";
},
{
}
)
Jetzt verstehe ich nicht, warum es einen Abstand zwischen dem ersten Wörterbuch von desc 1 und desc2 gibt, und ich weiß nicht, wie "Leute" das Ergebnis von people1 und people2 annehmen in einer einzigen Zeichenfolge
Können Sie mir helfen?
ok Ich werde deinen Vorschlag versuchen und ich werde dich wissen lassen – CrazyDev