gpt4 book ai didi

ios - NSXMLParser - 空值

转载 作者:行者123 更新时间:2023-11-28 19:47:05 24 4
gpt4 key购买 nike

我第一次尝试使用 NSXMLParser 从 XML 中获取值。但是我有一个问题。

在我的 XML 下方:

<Library>
<Book>
<ID>1</ID>
<TITLE>Test</TITLE>
</Book>
</Library>

和解析器代码:

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString                                 *)   elementName namespaceURI:(NSString *)namespaceURI qualifiedNam(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:@"Book"])
{
NSLog(@"%@", [attributeDict valueForKey:@"ID"]);
}
}

结果 ID 为空。你能帮帮我吗?

最佳答案

不幸的是,NSXMLParser 不是这样工作的。它按文档顺序遍历 XML 中的元素,因此当“Book”元素开始时,它还没有到达“ID”元素。如果 XML 看起来像这样,您的代码工作

<Book Id="1">
...
</Book>

但我想您无法控制 XML。那么你需要一个更复杂的解决方案。我相信以下方法会起作用:

添加这些实例变量

NSString *currentElement, *bookID, *bookTitle;
NSMutableString *elementValue;

实现以下方法:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString                                 *)   elementName namespaceURI:(NSString *)namespaceURI qualifiedNam(NSString *)qName attributes:(NSDictionary *)attributeDict {
currentElement = elementName;
elementValue = nil;
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
// Append characters to element value
if (!elementValue) elementValue = [NSMutableString stringWithCapacity:100];
[elementValue appendString:string];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName {
if ([@"Id" isEqualToString:elementName]) {
bookID = [elementValue copy];
} else if ([@"Title" isEqualToString:elementName]) {
bookTitle = [elementValue copy];
} else if ([@"Book" isEqualToString:elementName]) {
// end of Book element, do something with bookID and bookTitle
}
}

关于ios - NSXMLParser - 空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31515737/

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