-1

次のxmlがあります。gdataxml パーサーを使用してこれを解析しようとしています。xml の最初の部分を に解析できますが、<myBean>2</myBean>番目の部分からを解析することはできます。そのためのロジックを開発するのは難しいと感じています。ここで 2 日目は立ち往生しています。<trackBean>trackBean

 <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>親の中にa が存在するかどうかを確認するにはどうすればよいですか<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>子ノードを内部に入れるのが難しいことを理解しています<trackBean>

4

2 に答える 2

1

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

これが役立つことを願っています。

于 2012-04-14T06:03:32.130 に答える
0

GDataXMLを使用してXMLドキュメントを読み書きする方法

于 2012-03-30T09:24:51.973 に答える