如何解析简单的xml

如何解析简单的xml

本文介绍了如何解析简单的xml的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

I need only CaseId to store from the given xml. Can any one advice me on this simple parsing!

对我来说它的循环!并获取所有详细信息

For me its looping! and getting all details

推荐答案

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

Use the Below Code.Where Table is NSObject Class with the CaseId,PartyId,CartId as a properties in this class.If you have the xml url just called loadXMLByURL method with URl.After parsing you will get Each Object in TableArray which have the Table object with above properties.

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

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

Let me know if you have any doubt.

这篇关于如何解析简单的xml的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 16:46