2012-03-29 17 views
-1

私は以下のXMLを持っています。私はgdataxmlパーサーを使用してこれを解析しようとしています。私はから</myBean>までのxmlの最初の部分を解析できますが、<trackBean>から2番目の部分からは、trackBeanが内部で再帰しているので難しくなります。私はそのための論理を開発するのが難しいと思っています。私は2日目にここに立ち往生しています。次の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>

+0

質問を編集しました。 –

+0

答えはこちらですhttp://forums.macrumors.com/showthread.php?t=1000963 – akk

+0

ありがとうございます。しかし、私はGDataXmlの解析を探しています –

答えて

1

<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"]]; 

その親の内側に存在するかどうかを確認することができます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"]]; 
     } 

これが役に立ちます。

関連する問題