2011-02-07 24 views
1

私は、このXMLからタイトルを抽出しようとしています:foundCharactersiPhone XML構文解析の問題

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

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

didEndElement

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

NSXMLParsingのdidStartElementコードで

<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 setObject:currentTitle forKey:@"title"]; 

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

} 

問題は、何らかの理由で、それは、3つのノードのコンテンツを持っているdidEndElementcurrentTitleになったときということですそのように:

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

公開され、更新されたノードをピックアップしてタイトル文字列に追加する理由がわかりません。

答えて

2

あなたはそれあなたが決して解除didStartElement:@"title"currentElementを設定しますが。この特定の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

私のコードを編集しましたそれはThomsonに感謝します! – daidai

1

あなたはdidEndElementに追加する必要があります。

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

申し訳ありませんが働くだろうと思い、そのビットを追加するのを忘れ、私はすでにでていること持っていない - これはだった – daidai

0

NSMutableString * strFoundCharactersを定義します。クラスメソッドのプロパティを設定し、それを合成します。 はその後

- (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する

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

メイクゼロに私はそれが