首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计数ios中的xml多个子标签

计数ios中的xml多个子标签
EN

Stack Overflow用户
提问于 2013-11-20 14:26:55
回答 2查看 373关注 0票数 0

我的XML是这样的:

代码语言:javascript
运行
复制
<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>

这里我想计算一下objectiveC中每个<a>...</a>中的<d>...</d>标签的数量。第一个<a>标签的答案是3,第二个<a>标签的答案是2。请给我一个建议。谢谢。

下面是我的代码:

代码语言:javascript
运行
复制
- (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;
}
EN

回答 2

Stack Overflow用户

发布于 2013-11-20 14:48:06

试试这个:

代码语言:javascript
运行
复制
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;
    }
}
票数 3
EN

Stack Overflow用户

发布于 2013-11-20 15:12:41

声明以下对象

代码语言:javascript
运行
复制
int count;
BOOL insideATag;
NSMutableArray *dCounts;

在viewDidLoad中初始化dCounts

代码语言:javascript
运行
复制
dCounts = [[NSMutableArray alloc]init];

添加以下委托方法

代码语言:javascript
运行
复制
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if ([elementname isEqualToString:@"a"])
    {
        insideATag = YES;
        count = 0;
    }

}

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
   if ([element isEqualToString:@"a"]){
        insideATag = NO;
        [dCounts addObject:count]
    } else if ([elementname isEqualToString:@"d"] && insideATag)
    {
        count++;
    }
}

如果您想要计数第一个'a‘标记中的'd’标记,那么

代码语言:javascript
运行
复制
NSLog(@"Count of d  : %i",[dCounts objectAtIndex:0]);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20088940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档