Ios 为什么这不能正确解析?

Ios 为什么这不能正确解析?,ios,objective-c,nsxmlparser,Ios,Objective C,Nsxmlparser,基本上,我要分析一个子元素: <element> <sub element 1> <sub element 2> <sub element 3> <element> 这是第一个问题。第二个问题是,上面提到的应该有11项。但它只抓到了两件东西。请注意,每个项目都包含子元素,但有些子元素为空 以下是DiEndElement的一部分: 如果[elementName IsequalString:@Issue]{ //将cur

基本上,我要分析一个子元素:

<element>
   <sub element 1>
   <sub element 2>
   <sub element 3>
<element>
这是第一个问题。第二个问题是,上面提到的应该有11项。但它只抓到了两件东西。请注意,每个项目都包含子元素,但有些子元素为空

以下是DiEndElement的一部分:

如果[elementName IsequalString:@Issue]{ //将currentIssue对象添加到问题数组中 [问题添加对象:当前问题]; NSLog@Issues已添加:%@-%@-%@,currentIssue.sub-element-1,currentIssue.sub-element-2,currentIssue.sub-element-3; 当前问题=零; currentNodeContent=nil; } 如果[elementName isEqualToString:@子元素1]{ currentIssue.sub-element-1=currentNodeContent; NSLog@sub要素1:%@,currentIssue.sub-element-1; } 如果[elementName isEqualToString:@子元素2]{ currentIssue.sub-element-2=currentNodeContent; NSLog@sub要素2:%@,currentIssue.sub-element-2; } if[elementName IsequalString:@子元素3]{ currentIssue.sub-element-3=currentNodeContent; NSLog@sub要素3:%@,当前问题。子要素3; } 非常感谢您的建议和/或建议

更新1: 好的,我已经解决了这个问题

当我能够打印出currentNodeContent时,currentIssue=nil似乎会导致对象丢失其内容

因此,通过删除currentIssue,我现在可以看到我需要的所有假定元素

但还有一个问题。我现在可以看到所有的子元素,但只剩下一个子元素被部分抓取了,我不明白为什么。

因为,子元素1不是元素名。元素名为sub


尝试此代码,无论您的元素是否希望此代码适用于您….:

好的,我已经解决了这个问题

当我能够打印出currentNodeContent时,currentIssue=nil似乎会导致对象丢失其内容

因此,通过删除currentIssue,我现在可以看到我需要的所有假定元素


其次,为了使其正常工作,我在parserDidStartDocument下初始化了数组,而不是ParserDidStarteElement。

为什么在变量(例如sub-element-1)中包含连字符?同样对于您的elementName,sub-element-i-want-3!=第三分队,请告我。我很匆忙。请编辑。为什么不自己记录elementName?因为我可以看到elementName,所以我不明白为什么它无法获取值:无论如何,我已经解决了这个问题
Issues has been added: (null)-(null)-(null)
Issues has been added: sub-element-1 sub-element2 sub-element3
- (XMLParserViewController *) initXMLParser {


    appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    return self;
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
    attributes:(NSDictionary *)attributeDict 
{

    if([elementName isEqualToString:@"Books"]) {
        appDelegate.books = [[NSMutableArray alloc] init];
    }
    else if([elementName isEqualToString:@"Book"])
    {

        aBook = [[Books alloc] init];

    }

    NSLog(@"Processing Element: %@", elementName);
}

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

    if(!currentElementValue)
        currentElementValue = [[NSMutableString alloc] initWithString:string];
    else
        [currentElementValue appendString:string];

    NSLog(@"Processing Value: %@", currentElementValue);

}

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

    if([elementName isEqualToString:@"Books"])
        return;

    if([elementName isEqualToString:@"Book"])
    {
       [appDelegate.books addObject:aBook];        
          aBook = nil;
    }
    else if([elementName isEqualToString:@"name"])
    {
        aBook.name=currentElementValue;
    }
    else if([elementName isEqualToString:@"address"])
    {
        aBook.address=currentElementValue;
    }
    else if([elementName isEqualToString:@"country"])
    {
        aBook.country=currentElementValue;
    }        

    currentElementValue = nil;


    NSLog(@"%@",aBook.name);
    NSLog(@"%@",aBook.address);
    NSLog(@"%@",aBook.country);
}