解析XML维基百科
问题描述:
我使用NSXmlParser
,并试图解析这个XML文件:解析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
)内>
。
答
这条线,使问题:
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];
}
}
希望能对大家有所帮助。