ios - 在ios中计算xml多个子标签

标签 ios objective-c xml nsxmlparser

我的 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/

相关文章:

ios - 如何在 NSUserDefaults 中使用存储和使用 NSMutableAttributedString

ios - 当某些情况发生时如何停止插入segue?

objective-c - xcode iOS 9 键盘问题 : -endDisablingInterfaceAutorotationAnimated called without matching -beginDisablingInterfaceAutorotation

ios - 拉动刷新不会分离(不会停止刷新)-Objective-C

ios - 为不是字符串的 UItextfield/UIlabel 分配一个可选值

ios - 本地通知停止工作,无法弄清楚原因

ios - 检索特定月份中星期一的数量

java - android:translationY 属性隐藏 Edittext 的下边框

android - 如何更改工具栏选项背景的颜色

PHP 也解析来自包含 xsd 的 Web 服务的响应