我尝试在我的应用中解析xml Feed ... xml文件位于此网址
feeds.feedburner.com/blogspot/TUvAW?format=xml
问题在于,当我访问描述段时,它会显示不同的特殊符号,例如引号。这是我尝试从我的xml解析的描述段之一:
<description>Este es mi blog 3<img src="http://feeds.feedburner.com/~r/blogspot/TUvAW/~4/URCV9ModTR0" height="1" width="1"/></description>
我使用NSXMLParser解析它,这些是我在我使用的方法:
XMLParser.m
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"item"])
{
currentFeed = [Feed alloc];
isStatus = YES;
}
if ([elementname isEqualToString:@"author"])
{
isStatus = NO;
}
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (isStatus)
{
if ([elementname isEqualToString:@"description"])
{
currentFeed.description = currentNodeContent;
NSLog(@"%@",currentNodeContent);
}
if ([elementname isEqualToString:@"title"])
{
currentFeed.content = currentNodeContent;
NSLog(@"%@",currentNodeContent);
}
if ([elementname isEqualToString:@"link"])
{
currentFeed.WVUrl = currentNodeContent;
NSLog(@"%@",currentNodeContent);
}
}
if ([elementname isEqualToString:@"item"])
{
[self.feeds addObject:currentFeed];
currentFeed = nil;
currentNodeContent = nil;
}
}
我使用那些NSLog来跟踪我从解析中得到的字符串,但我的描述节点内容总是显示如下:&gt; 标题和链接节点完美显示。
我想从描述节点获取所有字符串以便稍后使用它,但我只是不能,我不知道这有什么问题。
答案 0 :(得分:1)
Abhishek,Rob和我已经提出了问题。但我认为值得总结并展示正确的解决方案。
主要问题是parser:foundCharacters:
标记会多次调用<description>
,每次调用都会提供一段描述。
解决方案是连接各个部分:
<强> XMLParser.h:强>
NSMutableString* currentNodeContent;
<强> XMLParser.m:强>
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if (currentNodeContent == nil)
currentNodeContent = [[NSMutableString alloc] initWithCapacity: 20];
[currentNodeContent appendString: [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
}
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"item"])
{
currentFeed = [Feed alloc];
isStatus = YES;
}
if ([elementname isEqualToString:@"author"])
{
isStatus = NO;
}
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (isStatus)
{
if ([elementname isEqualToString:@"description"])
{
currentTweet.description = currentNodeContent;
NSLog(@"%@",currentNodeContent);
}
if ([elementname isEqualToString:@"title"])
{
currentTweet.content = currentNodeContent;
NSLog(@"%@",currentNodeContent);
}
if ([elementname isEqualToString:@"link"])
{
currentFeed.WVUrl = currentNodeContent;
NSLog(@"%@",currentNodeContent);
}
}
if ([elementname isEqualToString:@"item"])
{
[self.feeds addObject:currentFeed];
currentFeed = nil;
[currentNodeContent release];
currentNodeContent = nil;
}
}
答案 1 :(得分:0)
Xml文件中的问题是使用“&amp;”字符。
这样做只需将xml数据放在一个字符串中然后替换“&amp;”使用任何唯一的字符串,然后解析您的xml。
在显示或使用xml数据时,只需检查您获得的字符串是否包含相同的唯一字符串,然后将该字符串替换为“&amp;”。