0

私はxmlの解析を取得しましたが、以下のxmlを解析するのは少し難しいです。あなたの提案に感謝します

<?xml version="1.0" encoding="UTF-8"?>
<AllJobs>
    <Mainjobs>
     <job1 name="simple">
     <Group name="one">
        <item name>"itemone"</item name>
        <item name>"itemtwo"</item name>
        <item name>"itemthree"</item name>
      </Group>
      <Group name="two">
        <item name>"itemfour"</item name>
        <item name>"itemfive"</item name>
        <item name>"itemsix"</item name>
      </Group>
    </job1>
    <job2 name="medium" />
    </job2>
    <job3 name="hard" />
    </job3>
    </Mainjobs>
</AllJobs>

上記のxmlから、「itemFour、item Five、item six」である以下のアイテム名を解析しようとしており、それらをテーブルビューに表示しています

<Group name="two">
    <item>"itemfour"</item>
    <item>"itemfive"</item>
    <item>"itemsix"</item>

私はこのように解析していますが、すべてのグループタグのすべてのアイテム名を取得しています

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

if([elementName isEqualToString:@"Alljobs"]){
    jobNameArray=[[NSMutableArray alloc]init];

}else if([elementName isEqualToString:@"Mainjobs"]){
    //  self.itemDict = [[NSMutableDictionary alloc] init];
    object=[[parseObject alloc]init];
    dict=[[NSMutableDictionary alloc] init];
}
      else if([elementName isEqualToString:@"Group"])
    {
 if ([str isEqualToString:@"Two"]) {
            currentElement=nil;
            currentElement=[[NSMutableString alloc]init];
        }
    }
   else if([elementName isEqualToString:@"item"])
    {
        str=[attributeDict objectForKey:@"name"];
        NSLog(@"the attribute string is %@",[attributeDict objectForKey:@"name"]);
    }

}

   -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    if(string){
            [currentElement appendString:string];
    NSLog(@"  the element00000000%@", currentElement);
}

}

    -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:    (NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if([elementName isEqualToString:@"Mainjobs"]){
        NSLog(@"the array count is %i",[jobNameArray count]);
}
else if([elementName isEqualToString:@"Job1"])
{

}
if([elementName isEqualToString:@"</item>"])
{
            NSLog(@"element ---------%@",elementName);

[jobNameArray addObject:str];
}
4

1 に答える 1

0

NSXmlParser を使用すると、識別されたタグによって文字が検出されるため、これはより困難になります。私も同じ問題に直面しました。その時、深さ変数を維持することでこれを解決しました.xmlを見ると、仕事の数がn個ある場合、どの基準でそれらを比較したので、ジョブ属性は私にとっては問題ないようです。しかし、あなたの場合、次のように達成できると思います:

  1. job という名前のクラスを作成します。

  2. 次のプロパティを持つジョブ クラス:

    ジョブ名:NSString; グループ名:NSString; アイテム:NSMutableArray;

  3. この Job オブジェクトを配列に追加します。

于 2013-04-15T11:42:45.433 に答える