1

我试图在我的应用程序中解析一个 xml 提要... xml 文件在这个 url 中

feeds.feedburner.com/blogspot/TUvAW?format=xml

问题是当我访问描述段时,它会显示不同的特殊符号,例如引号。这是我试图从我的 xml 中解析的描述段之一:

<description>Este es mi blog 3&lt;img src="http://feeds.feedburner.com/~r/blogspot/TUvAW/~4/URCV9ModTR0" height="1" width="1"/&gt;</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;
    }
}

我使用这些 NSLogs 来跟踪我从解析中获得的字符串,但我的描述节点内容总是显示如下: > 标题和链接节点显示完美。

我想从描述节点中获取所有字符串以供以后使用,但我不能,我不知道这有什么问题。

4

2 回答 2

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;
    }
}
于 2013-01-01T23:11:05.093 回答
0

Xml 文件中的问题是使用“&”字符。

这样做只需在一个字符串中获取 xml 数据,然后用任何唯一字符串替换“&”,然后解析您的 xml。

在显示或使用 xml 数据时,只需检查您获得的字符串是否包含相同的唯一字符串,然后用“&”替换该字符串。

于 2013-01-01T19:42:11.040 回答