как разобрать xml используя libxml2 в iphone - PullRequest
0 голосов
/ 06 января 2011

Я получаю информацию в виде XML с веб-сервера .net.

Я использую синтаксический анализатор NSXml для его анализа.

Но для разбора требуется время.

Я слышал, что libxmll2 работает быстрее, чем анализатор NSXml.

Но я не нашел четкой информации о том, как его использовать.

может любой другой, пожалуйста, опубликовать пример кода или пример, касающийся синтаксического анализа с использованием libxml2.

Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 06 января 2011

Вам нужно использовать синтаксический анализ XML для реализации этого. Я предлагаю использовать touchXML. Вот пример кода для этого:

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

Импорт библиотеки touchXML в заголовочный файл.

0 голосов
/ 06 января 2011

Я бы посоветовал вам взглянуть на TouchXML .

Это быстро, потому что он использует libxml2, и его намного проще использовать напрямую, чем libxml2, который написан простым c.

...