[英]XMLParser repeating elements on iphone
我有一個NSXMLParser
,它使用Apple對事件驅動的XML處理的實現來解析XML文件。
我已經正確設置了它,但是當我進行實際解析時,它在解析同一元素時會翻閱兩次。
我的代碼如下所示:
AppDelegate *myApp = (AppDelegate*)[[UIApplication sharedApplication] delegate];
NSData *tempData = [myApp.stringDetails dataUsingEncoding:NSUTF8StringEncoding];
NSString *textFields = [NSString string];
NSXMLParser *parser = [[NSXMLParser alloc]initWithData:tempData];
[parser setDelegate: self];
if ([parser parse]!= YES) {
NSLog(@"%@", parser.parserError.description);
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
textFields = elementName;
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if ([textFields isEqualToString:@"firstName"]) {
[firstName setText:string];
NSLog(@"first name is %@", string);
return;
}
if ([textFields isEqualToString:@"lastName"]) {
[lastName setText:string];
NSLog(@"last name is %@", string);
return;
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
return;
}
我正在解析的XML文檔如下所示:
<details>
<firstName>tester</firstName>
<lastName>testingson</lastName>
<address>
<street1>123 Main St.</street1>
<street2></street2>
<city>Anywhere</city>
<state>BC</state>
<country></country>
<postalCode>A0A0B0</postalCode>
</address>
<company>TEST</company>
<email>testing@test.com</email>
<cabbieNo>TEST</cabbieNo>
<driversLicense>TEST</driversLicense>
<plateNo>TEST</plateNo>
<services>
<taxi>1</taxi>
<ladies>1</ladies>
<limo>1</limo>
<handicap>1</handicap>
</services>
</details>
奇怪的是,我的調試日志如下:
2012-10-01 15:36:35.742 myAPP[9974:c07] first name is tester
2012-10-01 15:36:35.743 myAPP[9974:c07] first name is
2012-10-01 15:36:35.743 myAPP[9974:c07] last name is testingson
2012-10-01 15:36:35.744 myAPP9974:c07] last name is
如您所見,它遍歷每個元素兩次,但是第二次, string
為空(這不應該發生。實際上,甚至不應該再有一個foundCharacters
事件)。 你們知道為什么嗎?
謝謝!
您應該在didEndElement中獲得Element結果
這是例子
在- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
您應該附加字符串(找到的字符),例如:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (!currentStringValue) {
// currentStringValue is an NSMutableString instance variable
currentStringValue = [[NSMutableString alloc] initWithCapacity:50];
}
[currentStringValue appendString:string];
}
希望這對您有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.