0

このかなり複雑な XML がサーバーから返されています。後で使用するためにアクセスできるオブジェクトに解析するための助けが必要です。

これはxmlがどのように見えるかです

<Eng>
    <Result         >
        <Series         >
            <Link/>
            <FMF/>
                <AlsoLink/>
                <Plugins/>
            </FMF>
            <Sheet          >
                <Spaces>
                    <Spacing            >
                    <Names/>
                    </Spacing>
                    <Spacing            >
                    <Names/>
                    </Spacing>
                </Spaces>
            </Sheet>
        </Series>
    </Result>
</Eng>

次に、NSXMLParser を使用して、xml 内の各要素のすべての「ObjectForKey/s」を独自の辞書に解析しようとしています..それが理にかなっていれば。

これは私のコードが現在どのように見えるかです

#pragma mark - Parsing lifecycle

- (void)startTheParsingProcess:(NSData *)parserData
{
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //parserData passed to NSXMLParser delegate which starts the parsing process
    [parser setDelegate:self];
    [parser parse]; // starts the event-driven parsing operation.
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if([elementName isEqualToString:@"Series"]){
        parsedMutableDictionary = [[NSMutableDictionary alloc] initWithDictionary:attributeDict];
        self.parsedDataArrayOfDictionaries = [NSMutableArray arrayWithCapacity:8];

        if ([elementName isEqualToString:@"Link"]) {

        }
        if ([elementName isEqualToString:@"FMF"]) {
            if ([elementName isEqualToString:@"AlsoLink"]) {

            }
            else if ([elementName isEqualToString:@"Plugins"]) {

            }
        }
        else if ([elementName isEqualToString:@"Sheet"]) {

            if ([elementName isEqualToString:@"Spaces"]) {

                if ([elementName isEqualToString:@"Spacing"]) {

                    if ([elementName isEqualToString:@"Names"]) {

                    }
                }
            }

        }
    }

}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{    
    if([elementName isEqualToString:@"Series"]){
         [parsedDataArrayOfDictionaries addObject:parsedMutableDictionary];

        if ([elementName isEqualToString:@"Link"]) {

        }
        if ([elementName isEqualToString:@"FMF"]) {
            if ([elementName isEqualToString:@"AlsoLink"]) {

            }
            else if ([elementName isEqualToString:@"Plugins"]) {

            }
        }
        else if ([elementName isEqualToString:@"Sheet"]) {

            if ([elementName isEqualToString:@"Spaces"]) {

                if ([elementName isEqualToString:@"Spacing"]) {

                    if ([elementName isEqualToString:@"Names"]) {

                    }
                }
            }

        }
    }


//     parsedMutableDictionary = nil;
}

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
    NSLog(@"Paser Error = %@", parseError);
    UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"A parsing failure occurred." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [errorAlert show];
}


//TODO: Look into how to use this method over multiple views. i.e.(other requests such as keycode, advanced )
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    // display values
        NSArray *filteredArray = parsedDataArrayOfDictionaries;
        NSLog(@"%@", filteredArray);

}

私が抱えている問題は、自分のオブジェクトに何を持っているべきかを理解していないことです...また、これらの値の一部が返されたときに、複数の Spacing 要素を持つことができ、それを処理する方法がわかりません...

私の脳がこの問題を回避するのに苦労しているだけなので、何かを指定していない場合は、助けやヒントをいただければ幸いです。

ありがとう。

4

2 に答える 2

0

あなたは NSXMLParser を使用しています....タグ間の文字列を取得します...<tag>strings</tag>

複数の Spacing 要素を取得するには、すべての文字列を NSString オブジェクトに追加します。

于 2013-03-20T22:06:36.737 に答える