ioslibxml2nsxml

how to parse xml using libxml2 in iphone


i am getting information in the form of xml from .net web server.

I am using NSXml parser to parse it.

But it takes time to parse.

I hear that libxmll2 is faster than NSXml parser.

But i did n't find clear info regarding how to use it.

can any one pls post sample code or example regarding how to parse using libxml2.

Thank u in advance.


Solution

  • You need to use XML parsing to implement this.I suggest use touchXML. Here is a sample code for that:

    -(void)callwebservice{
        NSString *path = @"YOUR URL";
        [self grabRSSFeed:path];
    }
    
    -(void) grabRSSFeed:(NSString *)blogAddress {
        // Initialize the blogEntries MutableArray that we declared in the header
        blogEntries = [[NSMutableArray alloc] init];    
    
        // Convert the supplied URL string into a usable URL object
        NSURL *url = [NSURL URLWithString: blogAddress];
    
        // Create a new rssParser object based on the TouchXML "CXMLDocument" class, this is the object that actually grabs and processes the RSS data
        CXMLDocument *rssParser = [[[CXMLDocument alloc] initWithContentsOfURL:url options:0 error:nil] autorelease];
    
        // Create a new Array object to be used with the looping of the results from the rssParser
        NSArray *resultNodes = NULL;
    
        // Set the resultNodes Array to contain an object for every instance of an  node in our RSS feed
        resultNodes = [rssParser nodesForXPath:@"//Node you want to parse" error:nil];
    
        // Loop through the resultNodes to access each items actual data
        for (CXMLElement *resultElement in resultNodes) {
            // Create a temporary MutableDictionary to store the items fields in, which will eventually end up in blogEntries
            NSMutableDictionary *blogItem = [[NSMutableDictionary alloc] init];
    
            // Create a counter variable as type "int"
            int counter;
    
            // Loop through the children of the current  node
            for(counter = 0; counter < [resultElement childCount]; counter++) {
                // Add each field to the blogItem Dictionary with the node name as key and node value as the value
                [blogItem setObject:[[resultElement childAtIndex:counter] stringValue] forKey:[[resultElement childAtIndex:counter] name]];
                NSLog(@"Data = %@",[[resultElement childAtIndex:counter] stringValue]); 
            }
    
            // Add the blogItem to the global blogEntries Array so that the view can access it.
            [blogEntries addObject:[blogItem copy]];
    
        }
    
        [YourTable reloadData];
    }
    

    Import touchXML library in you header file.