NSXMLParser找不到结束标记



我试图从xml网页源中获取内容列表。Im using NSXMLParser atm.

这是代码:

- (void)main
{
    self.workingArray = [NSMutableArray array];
    self.workingPropertyString = [NSMutableString string];

    NSURL *url = [[NSURL alloc]initWithString:@"http://myxmlwebsite.xml"];
    NSXMLParser *parser = [[NSXMLParser alloc]initWithContentsOfURL:url];    
    [parser setDelegate:self];
    bool result = [parser parse];
    NSLog(@"result is ok for xml parse : %@", result ? @"Yes" : @"No");

    if (![self isCancelled])
    {
        self.appRecordList = [NSArray arrayWithArray:self.workingArray];
        SubCategoryViewController *subCategoryViewController;
        subCategoryViewController.entries = self.appRecordList;
        [subCategoryViewController.tableView reloadData];
    }
    self.workingArray = nil;
    self.workingPropertyString = nil;
    self.dataToParse = nil;
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
                                        namespaceURI:(NSString *)namespaceURI
                                       qualifiedName:(NSString *)qName
                                        attributes:(NSDictionary *)attributeDict
{
    if ([elementName isEqualToString:kUser])
    {
        self.workingEntry = [[UserFetchAppRecord alloc] init];
    }
    _elementsToParse = [[NSArray alloc] initWithObjects:
                        kid,ktitle, nil];
    self.storingCharacterData = [_elementsToParse containsObject:elementName];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
                                      namespaceURI:(NSString *)namespaceURI
                                     qualifiedName:(NSString *)qName
{
    if (self.workingEntry)
    {
        if (self.storingCharacterData)
        {
            NSString *trimmedString = [self.workingPropertyString stringByTrimmingCharactersInSet:
                                       [NSCharacterSet whitespaceAndNewlineCharacterSet]];
            [self.workingPropertyString setString:@""];
            if ([elementName isEqualToString:kid])
            {
                self.workingEntry.ids = trimmedString;
               NSLog(@"id : %@" , trimmedString);
            }
            else if ([elementName isEqualToString:ktitle])
            {        
                self.workingEntry.title = trimmedString;
                 NSLog(@"ktitle : %@" , trimmedString);
            }

        }
        else if ([elementName isEqualToString:kUser])
        {
            NSLog(@"inside elementName isEqualToString:kUser");
            [self.workingArray addObject:self.workingEntry];
            NSUInteger self_workingArrayCount = [self.workingArray count];
            self.workingEntry = nil;
        }
    }
}

现在在控制台上,如果我运行程序,我会得到这些结果:

"对于 XML 解析 = true,结果正常"

"ID : 1"

"ktitle : usertitle"

...

但是关闭选项卡的结果没有显示在控制台中,这个"内部元素名称是等于字符串:kUser"。

这怎么可能?

我的XML的标签是这样的:

<Main>
<user>
<id></id>
<title></title>
</user>
<user>
<id></id>
<title></title>
</user>
.....
</Main>

更改else if ([elementName isEqualToString:kUser])

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
                                  namespaceURI:(NSString *)namespaceURI
                                 qualifiedName:(NSString *)qName

if ([elementName isEqualToString:kUser]).

当元素idtitle开始时,self.storingCharacterData变得YES。所以当元素user结束时,self.storingCharacterData将被YESelse if ([elementName isEqualToString:kUser])不起作用。

相关内容

最新更新