gpt4 book ai didi

ios - 使用 NSXMLParser 解析 XML 并获取特定属性值

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

更新:我决定将我的网络服务更改为输出 JSON,这样更容易使用。我将保持这个开放状态,以防任何人都可以想出一个明智的解决方案,并且它可以帮助其他人。

我正在抓取一个 XML 文件,解析它,并尝试从特定标签获取内容:

//Grab the hosted XML
NSError *error;
NSURL *mainContentURL = [NSURL URLWithString:@"http://www.andrewlarking.co.uk/DigiCons/appContent.xml"];
NSString *mainPageContents = [NSString stringWithContentsOfURL:mainContentURL encoding:NSUTF8StringEncoding error:&error];
NSData *mainPageData = [mainPageContents dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"mainPageData returned = %@", [[NSString alloc] initWithData:mainPageData encoding:NSUTF8StringEncoding]);

//Parse the XML
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:mainPageData];
[parser setDelegate:self];
[parser parse];
}
}

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
NSLog(@"In parser");
if([elementName isEqualToString:@"feb5Content"])
{
NSLog(@"In elementname");
NSLog(@"valueforkey title = %@", [attributeDict valueForKey:@"page.title"]);
self.dcViewControllerLabel.text = [attributeDict valueForKey:@"page.title"];
}
}

一切都很好,但 key@"page.title"或 @"title"的值返回 null。这是 XML:

    <feb5Content>
<page>
<title>I am a test title.</title>
<subTitle>I am the subtitle.</subTitle>
</page>
</feb5Content>

有什么想法吗?

理想情况下,我希望能够获取元素中存在的各种元素的内容。所以我可以把标题、副标题、正文都放在下面,我需要捕获这些。应用程序的每个页面都会将其内容存储在元素中。

干杯。

最佳答案

那是因为您的页面标题不是 <feb5Content> 的属性元素。它是 <title> 的值元素。所以你必须听<title>的开始元素:

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
self.isTitleElement = [elementName isEqualToString:@"title"];
}

然后在下面的方法中获取<title>里面的值元素:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (self.isTitleElement) {
NSLog(@"valueforkey title = %@", string);
// store value so that it is not overwritten by the next title
[self.pageTitles addObject:string];
}
}

每次在 XML 元素中找到文本时都会调用此方法。所以你必须检查你是否在<title>里面调用此方法时的元素。这就是为什么我包括了ivar self.isTitleElement .

要存储页面标题,您可以将它们放入 NSMutableArray ivar 中。

关于ios - 使用 NSXMLParser 解析 XML 并获取特定属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20356469/

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