gpt4 book ai didi

ios - NSXMLParser 找不到结束标记

转载 作者:行者123 更新时间:2023-11-29 03:12:29 27 4
gpt4 key购买 nike

我正在尝试从 xml 网络源获取内容列表。我正在使用 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 parse = true 结果正常”

“编号:1”

“ktitle:用户标题”

...

但关闭选项卡的结果没有显示在控制台中,这个“inside elementName isEqualToString: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 将为 YES,而 else if ([elementName isEqualToString:kUser]) 不起作用。

关于ios - NSXMLParser 找不到结束标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22092252/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com