2012-03-29 20 views
-1

我有以下xml。我试图用gdataxml解析器解析这个。我能够解析xml的第一部分,<myBean></myBean>,但从第二部分,从<trackBean>,它变得越来越难trackBean内部递归。我发现很难为此开发逻辑。我在这里呆了第二天。如何解析下面的xml:递归案例

<return> 
    <myTrackBean> 
    <myBean> 
       <myStatus>false</myStatus> 
       <hisStatus>false</hisStatus> 
       <secondVcardBean> 
        <contactId>108</contactId>                       
        <myNumber>KXUOYHGCIO</myNumber> 
        <userId>56</userId> 
        <version>1</version>                       
       </secondVcardBean> 
       <myNumber>KXUOYHGCIO</myNumber> 
      </myBean> 
      <trackBean> 
       <myBean> 
        <myStatus>false</myStatus> 
        <hisStatus>false</hisStatus> 
        <secondVcardBean> 
        <contactId>105</contactId> 
        <myNumber>5D1X7XP6CW</myNumber> 
        <userId>54</userId> 
        <version>1</version> 
       </secondVcardBean> 
       <myNumber>5D1X7XP6CW</myNumber> 
      </myBean> 
      <trackBean> 
       <myBean> 
        <myStatus>false</myStatus> 
        <hisStatus>false</hisStatus> 
        <secondVcardBean> 
         <contactId>103</contactId> 
         <myNumber>0C3RM5UKBB</myNumber> 
         <userId>53</userId> 
         <version>8</version> 
        </secondVcardBean> 
        <myNumber>0C3RM5UKBB</myNumber> 
       </myBean> 
      </trackBean> 
     </trackBean> 
    </myTrackBean> 
</return> 

以下是我已经用于解析所述第一部分,从第一到<myBean> < myBean>的代码。我如何检查<trackBean>是否存在其父内<trackBean>

NSArray * array = [node nodesForXPath:@"//return/myTrackBean" error:nil]; 

      int noOfmyTrackBean = [array count]; 

      for(int i = 1; i<= noOfmyTrackBean; i++){ 


       NSString *tempXmlData = [NSString stringWithFormat:@"//return/myTrackBean/myBean"]; 

       NSString *myStatus = [node nodeStringForXPath:[tempXmlData stringByAppendingString:@"/myStatus"]]; 

       NSString *hisStatus = [node nodeStringForXPath:[tempXmlData stringByAppendingString:@"/hisStatus"]]; 

       NSString *contactId = [node nodeStringForXPath:[tempXmlData stringByAppendingString:@"/secondVcardBean/contactId"]]; 

       NSString *myNumber = [node nodeStringForXPath:[tempXmlData stringByAppendingString:@"/secondVcardBean/myNumber"]]; 

我明白,难的是在进入内部<trackBean>

+0

我编辑了这个问题。 – 2012-03-29 17:32:56

+0

回答是在这里去http://forums.macrumors.com/showthread.php?t=1000963 – akk 2012-03-30 07:23:20

+0

谢谢。但我正在寻找GDataXml解析 – 2012-03-30 08:48:50

回答

1

<trackBean>子节点我想你不需要担心一个很多关于递归,因为gdataxml似乎在内部处理该部分。您可以正常解析它,因为解析器对象需要在自身内部重复的节点的数量。我不知道它到底需要什么,但它肯定会帮助你。

NSArray * array = [node nodesForXPath:@"//return/myTrackBean" error:nil]; 
      NSLog(@"count :%d",[array count]); 
      NSLog(@"Node :%@",node); 

      int noOfPrimaryNodes = [array count]; 

      for(int i = 1; i<= noOfPrimaryNodes; i++){ 

       //For use from the second node 
       NSString *myxmlData = [NSString stringWithFormat:@"//return/myTrackBean/trackBean"]; 
       NSLog(@"myxmlData :%@",myxmlData); 


       NSArray *array = [node nodesForXPath:@"//return/myTrackBean/trackBean" error:nil]; 

       NSLog(@"Array count %d", [array count]); 
       if([array count]>0){ 
       GDataXMLElement *myNode = [[node nodesForXPath:@"//return/myTrackBean/trackBean" error:&error]objectAtIndex:0]; 
       NSLog(@"myNode :%@",myNode); 



       NSString *changingNode = @"//trackBean"; 


       for(int j = 0; j < [array count]; j++){ 

        NSString *myStatus = [node nodeStringForXPath:[changingNode stringByAppendingString:@"/myBean/myStatus"]]; 
        NSString * hisStatus = [node nodeStringForXPath:[changingNode stringByAppendingString:@"/myBean/hisStatus"]]; 
        NSString *contactId = [node nodeStringForXPath:[changingNode stringByAppendingString:@"/myBean/secondVcardBean/contactId"]]; 
        NSString *myNumber = [node nodeStringForXPath:[changingNode stringByAppendingString:@"/myBean/secondVcardBean/myNumber"]]; 
        NSString *versionNumber = [node nodeStringForXPath:[changingNode stringByAppendingString:@"/myBean/secondVcardBean/versionNumber"]]; 
     } 

希望这会有所帮助。