我的 XML 是这样的:
<a>
<b>b1</b>
<c>c1</c>
<d>
<x>apple1</x>
<y>orange1</y>
<z>Mango1</z>
</d>
<d>
<x>apple2</x>
<y>orange2</y>
<z>Mango2</z>
</d>
<d>
<x>apple3</x>
<y>orange3</y>
<z>Mango3</z>
</d>
</a>
<a>
<b>b2</b>
<c>c2</c>
<d>
<x>apple4</x>
<y>orange4</y>
<z>Mango4</z>
</d>
<d>
<x>apple5</x>
<y>orange5</y>
<z>Mango5</z>
</d>
</a>
这里我想统计<d>...</d>
的数量每个 <a>...</a>
中的标签在 Objective-C .第一个答案将是 3 <a>
标记和第二个 2 <a>
标签。请给我一个建议。谢谢。
这是我的代码:
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"a"])
{
currentBook = [[BookListInfo alloc] init];
currentNodeContentBook=[[NSMutableString alloc] init];
isInChapterDTO = false;
}
else if ([elementname isEqualToString:@"d"])
{
//currentBook = [[BookListInfo alloc] init];
currentNodeContentChapters=[[NSMutableString alloc] init];
isInChapterDTO = true;
currentChapter = [[Chapters alloc] init];
}
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if(isInChapterDTO==TRUE)
{
if ([elementname isEqualToString:@"x"])
{
currentChapter.chapterId = currentNodeContentChapters;
}
if ([elementname isEqualToString:@"y"])
{
NSString*appendString=@"B";
currentNodeContentChapters=[appendString stringByAppendingString:currentNodeContentChapters];
currentChapter.chapterName = currentNodeContentChapters;
}
if ([elementname isEqualToString:@"z"])
{
currentChapter.chapterDurationAsSec = currentNodeContentChapters;
}
}
else
{
if ([elementname isEqualToString:@"b"])
{
[currentNodeContentBook stringByAppendingString:currentNodeContentBook];
currentBook.bookId = currentNodeContentBook;
}
if ([elementname isEqualToString:@"c"])
{
......................
}
}
}
if ([elementname isEqualToString:@"a"])
{
[bookListArray addObject:currentBook];
currentBook = nil;
currentNodeContentBook = nil;
}
else if ([elementname isEqualToString:@"d"])
{
[chapterListArray addObject:currentChapter];
//currentBook.ChapterList.Add(currentChapter);
currentChapter = nil;
isInChapterDTO = false;
}
最佳答案
试试这个:
int dCount;
BOOL isATag;
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"a"])
{
isATag = YES;
}
else if ([elementname isEqualToString:@"d"])
{
if(isATag){
dCount++;
}
}
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementname isEqualToString:@"a"]){
NSLog(@"d tag count between A: %d",dCount);
dCount=0;
isATag = NO;
}
}
关于ios - 在ios中计算xml多个子标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20088940/