gpt4 book ai didi

objective-c - 从 Cocoa 中的字符串解析简单的 XML?

转载 作者:数据小太阳 更新时间:2023-10-29 02:50:40 25 4
gpt4 key购买 nike

我有一个简单的 XML,我需要从 puid-list 中获取 first 'id'。我找到了很多例子,但由于命名空间的原因,没有一个能完全做到这一点。如何将 id 作为 NSString 输出?

附言:我使用的是 Mac。

<genpuid songs="1" xmlns:mip="http://musicip.com/ns/mip-1.0#">
<track file="/htdocs/test.mp3" puid="0c9f2f0e-e72a-c461-9b9a-e18e8964ca20">
<puid-list>
<puid id="0c9f2f0e-e72a-c461-9b9a-e18e8964ca20"/>
</puid-list>
</track>
</genpuid>

最佳答案

您应该使用 NSXMLParser。在您的代码中创建一个实例并告诉它解析:

NSData * XMLData = [myXMLString dataUsingEncoding:NSUnicodeStringEncoding];
NSXMLParser * parser = [[NSXMLParser alloc] initWithData:XMLData];
[parser setDelegate:self];
[parser setShouldProcessNamespaces:YES]; // if you need to
[parser parse]; // start parsing

然后需要实现NSXMLParserDelegate的方法来获取解析时的回调:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict{

/* handle namespaces here if you want */

if([elementName isEqualToString:@"puid"]){
NSString * ID = [attributeDict objectForKey:@"id"];
// use ID string, or store it in an ivar so you can access it somewhere else
}
}

处理命名空间的注意事项:

如果设置了命名空间,elementName 是限定名称,因此可以有前缀(例如 mip:puid)如果您使用的是 Mac, NSXMLNode 必须方便类方法,localNameForName:prefixForName: 来获取字符串的两个部分。

此外,您可能需要 NXXMLParser 委托(delegate)方法 parser:didStartMappingPrefix:toURI:parser:didEndMappingPrefix:

请注意,NSXMLParser 返回的名称正是字符串中的名称(无论它们是否带有前缀)。所以属性被命名为 mip:id 的情况很少见,但如果你想变得健壮,你也需要检查这一点。

关于objective-c - 从 Cocoa 中的字符串解析简单的 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2946254/

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