xcode4 - 单个 View xcode 中的许多 NSXMLParser

标签 xcode4 nsxmlparser

我必须在一个 View 中解析两个 XML 文件,所以我使用两个 NSXMLParsers 来获取它。但问题是一个解析器被识别,而第二个解析器未被识别......我的意思是在调试器通过之后这行 [parser1 parse] 应该转到委托(delegate) didStartElement、foundcharacters 和 didEndElement,但在我的情况下,调试器没有输入这些委托(delegate)。它只是跳转到 [parser1 release] stmnt。所以这些委托(delegate)不会被 parser1 识别。是这样吗? 我写了这个:

 NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:Url];      
 [parser setDelegate:self];
 [parser setShouldProcessNamespaces:NO];
 [parser setShouldReportNamespacePrefixes:NO];
 [parser setShouldResolveExternalEntities:NO];
 [parser parse];
 [parser release];

  NSXMLParser *parser1 = [[NSXMLParser alloc] initWithContentsOfURL:Url1];      
[parser1 setDelegate:self];
[parser1 setShouldProcessNamespaces:NO];
[parser1 setShouldReportNamespacePrefixes:NO];
[parser1 setShouldResolveExternalEntities:NO];
[parser1 parse];
[parser1 release];


 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{
  if([elementName isEqualToString:@"TimeList"])
 {
 arr1=[[NSMutableArray alloc] init];
 drr1=[[NSMutableDictionary alloc] init];

 }
 if([elementName isEqualToString:@"Company"])
 { 
 drr1=[[NSMutableDictionary alloc] init];        
 }
 srr1=[[NSMutableString alloc] init];

 } 


 -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{


 [srr1 appendString:string];
 }


 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

 if([elementName isEqualToString:@"ID"])
 {

 [drr1 setObject:srr1 forKey:@"ID"];
 [srr1 release],srr1=nil;
 return;
 }  

 if([elementName isEqualToString:@"Company"]) 
 { 
 [arr1 addObject:drr1]; 
 }    


 if([elementName isEqualToString:@"TimeList"])
 {

[drr1 release];

 }

  [srr1 release],srr1=nil; 
 }




- (void)parser1:(NSXMLParser *)parser1 didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{
    if([elementName isEqualToString:@"categorylist"])
    {
        arr2=[[NSMutableArray alloc] init];
        drr2=[[NSMutableDictionary alloc] init];

    }
    if([elementName isEqualToString:@"lookup"])
    { 
        drr2=[[NSMutableDictionary alloc] init];        
    }
    srr2=[[NSMutableString alloc] init];

} 


-(void)parser1:(NSXMLParser *)parser1 foundCharacters:(NSString *)string{


    [srr2 appendString:string];
}


- (void)parser1:(NSXMLParser *)parser1 didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

    if([elementName isEqualToString:@"Code"])
    {

        [drr2 setObject:srr2 forKey:@"Code"];
        [srr2 release],srr2=nil;
        return;
    }  

    if([elementName isEqualToString:@"lookup"]) 
    { 
        [arr2 addObject:drr2]; 
    }    


    if([elementName isEqualToString:@"categorylist"])
    {

        [drr2 release];

    }

    [srr2 release],srr2=nil; 
    }

第一个解析器正在被识别并获取数据。但是对于第二个解析器 didStartElement 没有被识别...可能的原因是什么?

最佳答案

我自己解决了这个问题。实际上,我声明了一个字符串并向其传递了一些值。在解析它时进行检查,如果该条件为真,则它会解析.. 这就是我所做的:

NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:Url];      
[parser setDelegate:self];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
currentparser=@"1";
[parser parse];
[parser release];

  NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:Url1];      
[parser setDelegate:self];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
currentparser=@"2";
[parser parse];
[parser release];

 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
 {
 if(currentparser==@"1")
 {
     //do something
 } 
 if(currentparser=@"2")
 {
     //do something
  }
  }

 -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{


   if(currentparser==@"1")
     {
        //do something
     }
   if(currentparser=@"2")
    {
       //do something
    }
    }


    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

   if(currentparser==@"1")
    { 
     //do something
    }
    if(currentparser=@"2")
    {
      //do something
     }
     }

关于xcode4 - 单个 View xcode 中的许多 NSXMLParser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12853810/

相关文章:

objective-c - NSArray initWithContentsOfFile 返回 nil

javascript - 让 NSXMLParser 跳过一个元素

ios - 在 iOS swift 中解析 xml

iOS - XML 到 NSString 的转换

iphone - 在 xcode 中的 UIlabel 中显示 NSMutableArray

xcode - 在 xcode 4.0 中将文件夹存储在包内容(包资源)中

objective-c - 在 Objective-C 中,有没有办法指定您希望 @selector() 使用哪个选择器定义?

ios - 如何忽略一系列 NSString 中的空字符串值

iphone - 用于内存管理的 dealloc 与 ViewDidDissapear

xcode4 - Xcode 4 是否有用于替换和查找下一个/上一个的键盘快捷键?