我剛剛在NSXMLParser上做了一個教程。我完全不知所措的是NSXMLParser如何區分不同的元素。對我來說似乎沒有定義。NSXMLParser如何區分不同的元素?
這是我的XML
<?xml version="1.0" encoding="UTF-8"?>
<Prices>
<Price id="1">
<name>Rosie O'Gradas</name>
<Beer>4.50</Beer>
<Cider>4.50</Cider>
<Guinness>4</Guinness>
</Price>
</Prices>
這是我的解析器
-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"Prices"]) {
app.listArray = [[NSMutableArray alloc] init];
NSLog(@"The Prices Count");
}
else if ([elementName isEqualToString:@"Price"]) {
thelist = [[List alloc] init];
thelist.drinkID = [[attributeDict objectForKey:@"id"]integerValue];
}
}
-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (!currentElementValue) {
currentElementValue = [[NSMutableString alloc]initWithString:string];
} else {
[currentElementValue appendString:string];
}
}
-(void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"Prices"]) {
return;
}
if ([elementName isEqualToString:@"Price"]) {
[app.listArray addObject:thelist];
thelist = nil;
} else {
[thelist setValue:currentElementValue forKey:elementName];
currentElementValue = nil;
}
}
我也注意到,在屬性中的數據對象的名字是一樣的解析器。所以我至少明白這一點。
我很茫然,它將這些屬性賦值給它。
因此,在開始的時候初始化與
thelist = [[List alloc] init];
數據對象(名單是數據對象),但後來它,我不明白
thelist.drinkID = [[attributeDict objectForKey:@"id"]integerValue];
因爲它的第一件事在if語句中,每次找到id屬性時都不會被覆蓋。或者是'theList'聲明創建多個對象?
在發現的字符我真的不知道發生了什麼。儘可能多的我可以告訴foundCharaters字符串是元素內部的每一點文本。所以當前的元素值實際上只是附加在一起的一串字符串(但由於某種原因,我無法說出我不能NSLOG它)。
從那裏的didEndElement部分,我不知道這是否是代碼的正確解釋。
if ([elementName isEqualToString:@"Price"]) {
[app.listArray addObject:thelist];
thelist = nil;
}
據我所知,每個解析器撞擊元件價格該app.list數組對象(在另一個類中聲明)時間具有對象添加到它的thelist'。
但這裏是位在那裏我缺乏在以前方法的理解生效
else {
[thelist setValue:currentElementValue forKey:elementName];
currentElementValue = nil;
}
他們在這裏做什麼?從我看到的當前元素值僅僅是來自XML文件的混亂字符。它是如何組織的?元素名稱?
還有一個問題(抱歉的長度)爲什麼不是元素名稱區分大小寫,我正在試驗,我發現它不是。這兩種語言都區分大小寫。
面向對象編程的目的是爲了隱藏你的對象所做的事情,如果你有第三方對象,那麼我們只是使用它們:)從不懷疑它大聲笑...唯一的原因不要質疑,因爲每個人都會有不同的已經在NSXMLParser中完成的實現思路。 – doNotCheckMyBlog
我想我需要知道這裏發生了什麼。特別是currentElementValue部分 – Brockman