- Registriert
- 13.09.04
- Beiträge
- 8.971
Moin moin,
ich habe einen XML Parser, der einfach nicht das macht was ich will. Meine XML Datei ist wie folgt aufgebaut:
mein Parser so:
die Startelemente werden alle korrekt gefunden, denn die Ausgabe ergibt:
Er geht also nicht einmal in den Teil des "didEndElement" hinein. Was mach ich nur falsch (ist sicher nur ne Kleinigkeit, die ich vor lauter Code nicht sehe…).
ich habe einen XML Parser, der einfach nicht das macht was ich will. Meine XML Datei ist wie folgt aufgebaut:
Code:
<?xml version="1.0" encoding="utf-8"?>
<mitarbeiterliste>
<mitarbeiterentry>
<mitarbeitername><![CDATA[Franz Müller]]></mitarbeitername>
<mitarbeitertitel><![CDATA[Leiter des tollen Büros]]></mitarbeitertitel>
<mitarbeiterstrasse><![CDATA[Rothenbaumchaussee 11]]></mitarbeiterstrasse>
<mitarbeiterstadt><![CDATA[20148 Hamburg]]></mitarbeiterstadt>
<mitarbeitertelefonnummer><![CDATA[+49 40 469662 273]]></mitarbeitertelefonnummer>
<mitarbeiterfaxnummer><![CDATA[+49 40 469662 100]]></mitarbeiterfaxnummer>
<mitarbeiteremail><![CDATA[barghahn(at)molis.de]]></mitarbeiteremail>
</mitarbeiterentry>
</mitarbeiterliste>
mein Parser so:
Code:
@implementation mitarbeiterparsen
- (mitarbeiterparsen *) initXMLParser {
[super init];
appDelegate = (MolisAppDelegate *)[[UIApplication sharedApplication] delegate];
return self;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"mitarbeiterliste"]) {
NSLog(@"mitarbeiterliste");
appDelegate.mitarbeiter2 = [[NSMutableArray alloc] init];
}
else if([elementName isEqualToString:@"mitarbeiterentry"]) {
NSLog(@"mitarbeiterentry");
amitarbeiter = [[mitarbeiter alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
NSLog(@"Parser");
if(!currentElementValue)
{ currentElementValue = [[NSMutableString alloc] initWithString:string];
NSLog(@"@%",currentElementValue);
}
else{
[currentElementValue appendString:string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
NSLog(@"ein Endelement gefunden");
if([elementName isEqualToString:@"mitarbeiterliste"])
{
NSLog(@"Liste abgearbeitet");
return;
}
if([elementName isEqualToString:@"mitarbeiterentry"]) {
[appDelegate.mitarbeiter2 addObject:amitarbeiter];
NSLog(@"close Entry");
[amitarbeiter release];
amitarbeiter = nil;
}
if
([elementName isEqualToString:@"mitarbeitername"] ||
[elementName isEqualToString:@"mitarbeitername"] ||
[elementName isEqualToString:@"mitarbeiterstrasse"] ||
[elementName isEqualToString:@"mitarbeiterstadt"] ||
[elementName isEqualToString:@"mitarbeiteremail"] ||
[elementName isEqualToString:@"mitarbeitertelefonnummer"] ||
[elementName isEqualToString:@"mitarbeiterfaxnummer"]
) {
[amitarbeiter setValue:currentElementValue forKey:elementName];
NSLog(@"%@",elementName);
NSLog(@"hab was gefunden");
}
[currentElementValue release];
currentElementValue = nil;
}
- (void) dealloc {
[amitarbeiter release];
[currentElementValue release];
[super dealloc];
}
@end
die Startelemente werden alle korrekt gefunden, denn die Ausgabe ergibt:
[Session started at 2010-04-26 20:53:00 +0200.]
2010-04-26 20:53:03.936 parsertest[1193:207] mitarbeiterliste
2010-04-26 20:53:03.937 parsertest[1193:207] Parser
2010-04-26 20:53:03.938 parsertest[1193:207] mitarbeiterentry
2010-04-26 20:53:03.938 parsertest[1193:207] Parser
Er geht also nicht einmal in den Teil des "didEndElement" hinein. Was mach ich nur falsch (ist sicher nur ne Kleinigkeit, die ich vor lauter Code nicht sehe…).