2011-02-07 83 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我认为它会工作