0

私はNSXmlParserこのXMLファイルを使用して解析しようとしています:

<api>
<query>
<normalized>
<n from="new york" to="New york"/>
</normalized>
<redirects>
<r from="New york" to="New York"/>
</redirects>
<pages>
<page pageid="8210131" ns="0" title="New York">
<extract xml:space="preserve">&lt;p>&lt;b>New York&lt; ...

<extract>基本的にこのファイルはかなり長いですが、要素だけをコピーしようとしています。

NSMutableString私はこのコードでいくつかの方法でそれを行いました:

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    CrrentString = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    [CrrentString appendString:string];
    NSLog(@"%@",CrrentString);
}

-(void)parser:(NSXMLParser *)parser
   didStartElement:(NSString *)elementName
   namespaceURI:(NSString *)namespaceURI
  qualifiedName:(NSString *)qName
     attributes:(NSDictionary *)attributeDict
{
    currentKey = nil;

    if ([elementName isEqualToString:@"extract"]) {
        CrrentString = [attributeDict objectForKey:@"extract"];
        return;
    }
}

しかし、最終的には、これは( )>内にのみ表示されます。NSMutableStringCrrentString

4

1 に答える 1

2

この行は問題を引き起こします:

CrrentString = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

見つかった文字メソッドが機能するたびに、以前の が上書きされますCrrentString。そのため、最後に見つかった文字のみを取得しています。

したがって、次のように変更します。

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    NSString *temp= (NSString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    [CrrentString appendString:temp];
    NSLog(@"%@",CrrentString);
}

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    CrrentString = nil;

    if ([elementName isEqualToString:@"extract"])
    {
        CrrentString = [[NSMutableString alloc] init];
    }
}

それが役立つことを願っています。

于 2012-09-13T17:14:00.463 に答える