gpt4 book ai didi

ios - 如何在 Objective C 中解析 XML 文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:15 25 4
gpt4 key购买 nike

我正在尝试解析 this xml file .我遇到的问题是我想使用-(void)parser:(NSXMLParser*)parser didStartElement ... 深入到此 xml 文件的多个级别。

这是我目前所拥有的:

#pragma didStartElement (from the parser protocol)
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
// Choose the tag
if ([elementName isEqualToString:@"item"]) {

NSString *firstName = [attributeDict valueForKey:@"firstname"];
NSString *lastName = [attributeDict valueForKey:@"lastname"];
NSString *birthDay = [attributeDict valueForKey:@"birthday"];

Politician *politician = [[Politician alloc] initWithName:firstName lName:lastName bDay:birthDay];

if (politician != nil) {

[people addObject:politician];
}
}

}

问题是这段代码没有向下钻取。有没有一种方法可以选择性地从特定标签(例如:人)开始解析并检查该标签的键或重写“elementName”的值以便我可以使用 multipe if 语句?这样做的正确方法是什么?非常感谢。

最佳答案

您无法在您的 attributeDict 中获取名字、姓氏等。属性字典包含如下格式的值

<count n="1">

在上面的例子中,attributeDict 保存了 n

的值

为了解析给定的 xml,您可以使用以下代码。

声明对象

Politician *politician;
NSString *curElement;
NSMutableArray *politicians;
BOOL isCongressNumbers;

初始化 viewDidLoad 中的政治家

politicians = [[NSMutableArray alloc]init];

添加委托(delegate)方法

#pragma mark - NSXMLParser Delegate

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"item"]) {
politician = [[Politician alloc]init];

} else if ([elementName isEqualToString:@"congress_numbers"]) {
isCongressNumbers = YES;
}

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
curElement = string;


}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"item"] && !isCongressNumbers) {
[politicians addObject:politician];
} else if ([elementName isEqualToString:@"firstname"]) {
politician.name = curElement;
} else if ([elementName isEqualToString:@"lastname"]) {
politician.lName = curElement;
} else if ([elementName isEqualToString:@"birthday"]) {
politician.bDay = curElement;
} else if ([elementName isEqualToString:@"congress_numbers"]) {
isCongressNumbers = NO;
}
}

关于ios - 如何在 Objective C 中解析 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20062917/

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