我正在使用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"><p><b>New York< ...
基本上这个文件很长,但我只想复制<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;
}
}
但最后,这只在>
(NSMutableString
)中只给了我CrrentString
。
答案 0 :(得分: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];
}
}
希望它能提供帮助。