Objective c 在目标C中的节点处获取XML内容
使用Objective C-我希望循环遍历XML树,并在与特定元素名称匹配的特定节点的每个实例上显示完整的XML内容 例如,我希望在元素b的每个实例中获得XML(表示为NSString)。如果元素b中只有一个字符串,我就可以得到该值,但是如何获得包含所有元素名称的XML格式的NSString表示Objective c 在目标C中的节点处获取XML内容,objective-c,xml,Objective C,Xml,使用Objective C-我希望循环遍历XML树,并在与特定元素名称匹配的特定节点的每个实例上显示完整的XML内容 例如,我希望在元素b的每个实例中获得XML(表示为NSString)。如果元素b中只有一个字符串,我就可以得到该值,但是如何获得包含所有元素名称的XML格式的NSString表示 <element a> <element b> <element c> some text 1 </eleme
<element a>
<element b>
<element c>
some text 1
</element c>
</element b>
<element b>
<element c>
some text 2
</element c>
</element b>
<element b>
<element c>
some text 3
</element c>
</element b>
</element a>
一些文本1
一些文本2
一些文本3
您可以使用NSXMLParser来完成此操作。类别(1)的三个主要部分检查开口标签:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict;
(2) 抓取遇到的节点内的内容:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
以及(3)在节点完成时将数据存储到您选择的适当位置:
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;
苹果公司有一本极好的指南介绍NSXMLParser,我可以想到三种方法,它们各有优缺点
昨晚我灵机一动,这是我想出的解决办法。。。看起来有点不雅观,但确实有效
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
if ([elementName isEqualToString:@"element b"])
{
area = [[NSMutableString alloc] init];
current_element = [elementName copy];
}
else if ([current_element isEqualToString:@"element b"])
{
NSString *tag = [NSString stringWithFormat:@"<%@>", elementName];
[area appendString:tag];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"element b"])
{
NSLog(@"tag info: %@", area);
}
else if ([current_element isEqualToString:@"element b"])
{
NSString *tag = [NSString stringWithFormat:@"</%@>", elementName];
[area appendString:tag];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if ([current_element isEqualToString:@"element b"]) {
[area appendString:string];
}
}
-(void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName属性:(NSDictionary*)attributeDict{
if([elementName IsequalString:@“element b”])
{
area=[[NSMutableString alloc]init];
当前_元素=[elementName copy];
}
else if([当前元素IsequalString:@“元素b”])
{
NSString*标记=[NSString stringWithFormat:@',elementName];
[区域追加字符串:标记];
}
}
-(void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName{
if([elementName IsequalString:@“element b”])
{
NSLog(@“标签信息:%@”,区域);
}
else if([当前元素IsequalString:@“元素b”])
{
NSString*标记=[NSString stringWithFormat:@',elementName];
[区域追加字符串:标记];
}
}
-(void)解析器:(NSXMLParser*)解析器查找字符:(NSString*)字符串{
if([current_element IsequalString:@“element b”]){
[区域追加字符串:字符串];
}
}
哦,等等。我完全误解了你的问题。可以说,您正在寻找从XML中解析XML的方法。我想,使用NSXMLParser的这个标准实现,你可以通过知道你在任何给定的时间都在哪个节点上来重构你所需要的东西……我想这有点过于苛刻了。这很重要:平台是iPhone还是Mac OS X?原因是OS X Cocoa包含XML DOM类,但iPhone没有。除非他的目标平台是OS X,它内置了XML DOM类。Doh!我假设iPhone:-)