如何解析简单的xml

时间:2012-08-16 08:44:12

标签: iphone ipad

    <NewDataSet>
      <Table>
        <CaseId>743</CaseId>
        <PartyId>11100550</PartyId>
        <CartId>18</CartId>

      </Table>
      <Table>
        <CaseId>742</CaseId>
        <PartyId>11100549</PartyId>
        <CartId>1148</CartId>
        <BusinessID>19</BusinessID>

      </Table>
    </NewDataSet>


        NSData* data = [xmlResponseData dataUsingEncoding:NSUTF8StringEncoding];

    //   NSXMLParser *XMLparser = [[NSXMLParser alloc] initWithData:data];
    //    [XMLparser setDelegate:self];

        BOOL success;

        if (XMLparser) // addressParser is an NSXMLParser instance variable
            [XMLparser release];

        XMLparser = [[NSXMLParser alloc] initWithData:data];
        [XMLparser setDelegate:self];
        [XMLparser setShouldResolveExternalEntities:YES];

        success = [XMLparser parse];   // return value not used
        // if not successful, delegate is informed of error 

       if(success)
            NSLog(@"Sucess Parsed");
        else
            NSLog(@"Error Error Error!!!");

    //  NSLog(@"Parsed string : %@",valueForItem);

    }

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

        if([elementName isEqualToString:@"NewDataSet"]) {
            caseID_List = [[NSMutableArray alloc]init];
        }
        NSLog(@"Processing Element: %@", elementName);

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

        }

    }

    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 

        if(!currentElementValue) 
            currentElementValue = [[NSMutableString alloc] initWithString:string];
        else
            [currentElementValue appendString:string];

        NSLog(@"Processing Value: %@", currentElementValue);


    }

    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
      namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

      if([elementName isEqualToString:@"NewDataSet"]) 
return;
    }

我只需要CaseId来存储给定的xml。任何人都可以通过这个简单的解析来建议我!

对我来说它的循环!并获得所有细节

1 个答案:

答案 0 :(得分:2)

使用Below Code.Where Table是NSObject类,CaseId,PartyId,CartId作为此类中的属性。如果你有xl url刚刚用URl调用loadXMLByURL方法。解析之后你会得到TableArray中的每个Object拥有具有上述属性的Table对象。

NSMutableString *currentNodeContent;
NSXMLParser     *parser;
Tweet           *currentTweet;
bool            isStatus;

-(id) loadXMLByURL:(NSString *)urlString
{
    _tweets         = [[NSMutableArray alloc] init];
    NSURL *url      = [NSURL URLWithString:urlString];
    NSData  *data   = [[NSData alloc] initWithContentsOfURL:url];
    parser          = [[NSXMLParser alloc] initWithData:data];
    parser.delegate = self;
    [parser parse];
    return self;
}

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

    - (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
    {
        if ([elementname isEqualToString:@"Table"]) 
        {
            currentTable = [Table alloc];
                isStatus = YES;
        }
    }

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if (isStatus) 
    {
        if ([elementname isEqualToString:@"CaseId"]) 
        {
            currentTable.CaseId = currentNodeContent;
        }
        if ([elementname isEqualToString:@"PartyId"]) 
        {
            currentTable.PartyId = currentNodeContent;
        }
        if ([elementname isEqualToString:@"CartId"]) 
        {
            currentTable.CartId = currentNodeContent;
        }

    }
    if ([elementname isEqualToString:@"Table"]) 
    {
        [self.tableArray addObject:currentTable];
        currentTable = nil;
        currentNodeContent = nil;
    }
}

如果您有任何疑问,请告诉我。