2011-02-07 158 views
1

我試圖從這個XML標題:在NSXMLParsing的didStartElement代碼iPhone XML解析問題

<entry> 
... 
<title type="html">Some title</title> 
<published>2011-02-07T00:04:16Z</published> 
<updated>2011-02-07T00:04:16Z</updated> 
... 
</entry> 

if ([elementName isEqualToString:@"entry"]) 
{ 
    item = [[NSMutableDictionary alloc] init]; 
} 

if([elementName isEqualToString:@"title"]) 
{ 
    currentElement = [elementName copy]; 
    currentTitle = [[NSMutableString alloc] init]; 
} 

foundCharacters

if ([currentElement isEqualToString:@"title"]) 
{ 
    [currentTitle appendString:string]; 
} 

didEndElement

if ([elementName isEqualToString:@"entry"]) 
{ 
    [item setObject:currentTitle forKey:@"title"]; 

    [currentElement release]; 
    currentElement = nil; 
    [item release]; 
    item = nil; 

} 

的問題是,由於某種原因,當它到達didEndElementcurrentTitle已經拿到了三個節點的內容,所以它的:

一些 title2011-02-07T00:04:16Z2011-02- 07T00:04:16Z

我不明白爲什麼它拾取發佈和更新的節點並將它們附加到標題字符串。

回答

2

您在didStartElement:設置currentElement@"title"但你永遠不取消它。這個特定的XML文件中的第一個元素是title,所以你設置了currentElement,並且之後每加入一個foundCharacters:。更改didStartElement:到:

currentElement = [elementName copy]; 
if ([elementName isEqualToString:@"entry"]) 
{ 
    item = [[NSMutableDictionary alloc] init]; 
} 

if([elementName isEqualToString:@"title"]) 
{ 
    currentTitle = [[NSMutableString alloc] init]; 
} 
+0

這是它感謝湯姆森! – daidai 2011-02-07 05:06:02

1

你要添加到didEndElement:

if ([elementName isEqualToString:@"title"]) 
{ 
    [currentElement release]; 
    currentElement = nil; 
} 
+0

對不起忘了補充說一下,我有,在已經 - 編輯我的代碼 – daidai 2011-02-07 04:56:19

0

定義 的NSMutableString * strFoundCharacters;在類方法中設置屬性併合成它。 然後在

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *) string { 
    NSString *strAppend = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    if ([strAppend length] > 0) { 
     [self.strFoundCharacters appendString:string]; 
    } 
} 

化妝零到

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 


if ([elementName isEqualToString:@"title"]) { 
     self.currentTitle = self.strFoundCharacters; 
    } 
    [self.strFoundCharacters setString:@""]; 

    } 

strfoundcharacter我認爲它會工作