IOS解析具有不同父项下相同名称的多个标记的XML
我有一个XML文件,我正试图使用NSXMLPARSER解析它。xml的结构如下所示:IOS解析具有不同父项下相同名称的多个标记的XML,ios,xml-parsing,Ios,Xml Parsing,我有一个XML文件,我正试图使用NSXMLPARSER解析它。xml的结构如下所示: <report> <Page1> <row> <company> <val> company 1 </val> </company> <TIME1> <val&
<report>
<Page1>
<row>
<company>
<val>
company 1
</val>
</company>
<TIME1>
<val>
time 1
</val>
</TIME1>
<document>
<val>
document 1
</val>
</document>
</row>
<row>
<company>
<val>
company 2
</val>
</company>
<TIME1>
<val>
time 2
</val>
</TIME1>
<document>
<val>
document 2
</val>
</document>
</row>
</Page1>
</report>
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
currentNodeContent2 = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; }
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"Company"])
{
currentRfp = [rfp alloc];
isStatus = YES;
}
if ([elementname isEqualToString:@"TIME1"])
{
isStatus = NO;
}
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (isStatus )
{
if ([elementname isEqualToString:@"val"])
{
currentRfp.content2 = currentNodeContent2;
}
if ([elementname isEqualToString:@"val"])
{
currentRfp.dateCreated2 = currentNodeContent2;
}
}
if ([elementname isEqualToString:@"row"])
{
[self.rfps addObject:currentRfp];
currentRfp = nil;
currentNodeContent2 = nil;
}
}
- (void) parser:(NSXMLParser *)parser foundCharacters2:(NSString *)string
{
currentNodeContent2 = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
我只是在学习,可能有一个简单的答案,但我被卡住了您可以使用以下代码来完成此操作:
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"row"])
{
currentRfp = [rfp alloc];
}
currentNodeContent2 = [[NSMutableString alloc] init];
}
- (void) parser:(NSXMLParser *)parser foundCharacters2:(NSString *)string
{
currentNodeContent2 = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementname isEqualToString:@"val"])
{
return;
}
if ([elementname isEqualToString:@"TIME1"])
{
//you get val of time1 here
}
if ([elementname isEqualToString:@"company"])
{
//you get val of company here
}
if ([elementname isEqualToString:@"document"])
{
//you get val of document here
}
if ([elementname isEqualToString:@"row"])
{
[self.rfps addObject:currentRfp];
currentRfp = nil;
}
[currentNodeContent2 release];
currentNodeContent2 = nil;
}
谢谢你的快速回复。我尝试了这个,当我运行应用程序并访问视图时,我现在获得了EXC\u BAD\u访问权限。有什么想法吗?原来每个标签(公司、文档、时间1)都有另一个子名称@BobbyLutier:放置断点并检查崩溃的位置。我有另一个版本需要删除。我尝试了你的方法,但没有达到目的,最后找到了另一个类似的帖子,效果非常好