Τρόπος ανάλυσης αρχείων XML σε Xcode

Αν και είναι ενσωματωμένο XML Το πρόγραμμα ανάλυσης προσθέτει πραγματική αξία σε μια νέα εφαρμογή για επιτραπέζιους υπολογιστές ή κινητές συσκευές, κωδικοποιώντας ότι η λειτουργικότητα απαιτεί συνήθως πολύ χρόνο ανάπτυξης και δοκιμή beta. Το πρόγραμμα Xcode της Apple περιλαμβάνει ένα πρόγραμμα ανάλυσης XML που παρακάμπτει το μεγαλύτερο μέρος αυτής της χειροκίνητης εργασίας.

Ενα XML Το αρχείο μπορεί να περιέχει οτιδήποτε, από βασικά δεδομένα σχετικά με την εφαρμογή σας έως ένα RSS feed για έναν ιστότοπο. Μπορούν επίσης να είναι ένας πολύ καλός τρόπος ενημέρωσης των πληροφοριών εντός της εφαρμογής σας από απόσταση, παρακάμπτοντας έτσι την ανάγκη υποβολής ενός νέου δυαδικού στην Apple απλώς για να προσθέσετε ένα νέο στοιχείο σε μια λίστα.

Η διαδικασία Xcode

Η ενσωματωμένη διαδικασία Xcode περιέχει βήματα για την προετοιμασία των μεταβλητών που θα χρησιμοποιηθούν, ξεκινώντας τη διαδικασία ανάλυσης XML, τροφοδοτώντας τη διαδικασία αυτή ένα αρχείο, αξιολόγηση μεμονωμένων στοιχείων και χαρακτήρων (τιμή) εντός αυτών των στοιχείων, αναγνώριση του τέλους ενός μεμονωμένου στοιχείου και τερματισμός της ανάλυσης επεξεργάζομαι, διαδικασία.

instagram viewer

Χρησιμοποιήστε το πρόγραμμα ανάλυσης XML

Για να απεικονίσουμε τις λεπτομέρειες, θα αναλύσουμε ένα παράδειγμα αρχείου από το Διαδίκτυο, διαβιβάζοντάς το μια συγκεκριμένη διεύθυνση ιστού (Διεύθυνση URL).

Ξεκινήστε με τη δημιουργία του αρχείου κεφαλίδας. Αυτό είναι ένα παράδειγμα ενός πολύ βασικού αρχείου κεφαλίδας για έναν ελεγκτή προβολής λεπτομερειών με τις ελάχιστες απαιτήσεις για την ανάλυση του αρχείου μας:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;
NSXMLParser * rssParser;
NSMutableArray * άρθρα;
NSMutableDictionary * στοιχείο;
NSString * currentElement;
NSMutableString * ElementValue;
Σφάλμα BOOLParsing;
}
@property (nonatomic, retain) IBOutlet DetailViewController * detailViewController;
- (void) parseXMLFileAtURL: (NSString *) URL;


Η συνάρτηση parseXMLFileAtURL ξεκινά τη διαδικασία. Όταν τελειώσει, τα "άρθρα" NSMutableArray κρατούν τα δεδομένα. Ο πίνακας αποτελείται από μεταβλητά λεξικά με κλειδιά που σχετίζονται με τα ονόματα πεδίων στο αρχείο XML.

Στη συνέχεια, αρχικοποιήστε τη διαδικασία:

- (void) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Το αρχείο βρέθηκε και ξεκίνησε η ανάλυση");
}

Αυτή η συνάρτηση εκτελείται στην αρχή της διαδικασίας. Δεν χρειάζεται να βάλετε τίποτα σε αυτήν τη συνάρτηση, αλλά εάν θέλετε να εκτελέσετε μια εργασία όταν αρχίσει η ανάλυση του αρχείου, εδώ θα βάλατε τον κωδικό σας.

Δώστε εντολή στο πρόγραμμα να κατεβάσει κάτι

Στη συνέχεια, δώστε εντολή στο πρόγραμμα να κατεβάσει κάτι:

- (void) parseXMLFileAtURL: (NSString *) URL
{
NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, όπως το Gecko) Έκδοση / 3.2.1 Safari / 525.27.1 ";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: request returnResponse: nil error: nil];
άρθρα = [[NSMutableArray assign] init];
errorParsing = ΟΧΙ;
rssParser = [[NSXMLParser assign] initWithData: xmlFile];
[rssParser setDelegate: self];
// Ίσως χρειαστεί να ενεργοποιήσετε ορισμένα από αυτά ανάλογα με τον τύπο του αρχείου XML που αναλύετε
[rssParser setShouldProcessNamespaces: ΟΧΙ];
[rssParser setShouldReportNamespacePrefixes: ΟΧΙ];
[rssParser setShouldResolveExternalEntities: ΟΧΙ];
[rssParser ανάλυση];
}


Αυτή η λειτουργία δίνει εντολή στον κινητήρα να κατεβάσει ένα αρχείο σε μια συγκεκριμένη διεύθυνση ιστού (URL) και να ξεκινήσει τη διαδικασία ανάλυσης του. Λέμε στον απομακρυσμένο διακομιστή ότι είμαστε ένα Safari που λειτουργεί σε Mac για την περίπτωση που ο διακομιστής προσπαθεί να ανακατευθύνει το iPhone / iPad σε μια έκδοση για κινητά.

Οι επιλογές στο τέλος είναι συγκεκριμένες για συγκεκριμένα αρχεία XML. Τα περισσότερα αρχεία RSS και τα γενικά αρχεία XML δεν θα πρέπει να είναι ενεργοποιημένα.

Σφάλμα-Ελέγξτε το αποτέλεσμα

Εκτελέστε βασικό έλεγχο σφαλμάτων στο αποτέλεσμα:

- (void) parser: (NSXMLParser *) parser parseError Έγινε: (NSError *) parseError {
NSString * errorString = [NSString stringWithFormat: @ "Κωδικός σφάλματος% i", [parseError code]];
NSLog (@ "Σφάλμα ανάλυσης XML:% @", errorString);
errorParsing = ΝΑΙ;
} Αυτή η δρομολόγηση ελέγχου σφαλμάτων ορίζει μια δυαδική τιμή εάν συναντήσει σφάλμα. Μπορεί να χρειαστείτε κάτι πιο συγκεκριμένο εδώ, ανάλογα με το τι κάνετε. Εάν απλά πρέπει να εκτελέσετε κάποιο κώδικα μετά την επεξεργασία σε περίπτωση σφάλματος, το


Αυτή η ρουτίνα ελέγχου σφαλμάτων ορίζει μια δυαδική τιμή εάν συναντήσει σφάλμα. Μπορεί να χρειαστείτε κάτι πιο συγκεκριμένο εδώ, ανάλογα με το τι κάνετε. Εάν πρέπει απλώς να εκτελέσετε κάποιο κώδικα μετά την επεξεργασία σε περίπτωση σφάλματος, τότε μπορεί να κληθεί η δυαδική μεταβλητή ανάλυσης σφαλμάτων.

Αναλύστε το ανακτημένο περιεχόμενο

Στη συνέχεια, το πρόγραμμα αναλύει το ανακτημένο περιεχόμενο και το αναλύει:

- (void) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName χαρακτηριστικά: (NSDictionary *) attributeDict {
currentElement = [elementName copy];
ElementValue = [[NSMutableString assign] init];
εάν ([elementName isEqualToString: @ "item"]) {
item = [[NSMutableDictionary dial] init];
}
}


Το κρέας του προγράμματος ανάλυσης XML περιέχει τρεις λειτουργίες, μία που εκτελείται στην αρχή ενός ατόμου στοιχείο, ένα που τρέχει κατά τη μέση της ανάλυσης του στοιχείου και ένα που τρέχει στο τέλος του στοιχείο.

Για αυτό το παράδειγμα, θα αναλύσουμε ένα αρχείο παρόμοιο με τα αρχεία RSS που αναλύουν τα στοιχεία σε ομάδες κάτω από την επικεφαλίδα του αντικείμενα μέσα στο αρχείο XML. Στην αρχή της επεξεργασίας, ελέγχουμε το όνομα στοιχείου "item" και εκχωρούμε το λεξικό αντικειμένων μας όταν εντοπίζεται μια νέα ομάδα. Διαφορετικά, αρχικοποιούμε τη μεταβλητή μας για την τιμή:

- (void) parser: (NSXMLParser *) parser foundCharacters: (NSString *) string {
[ElementValue appendString: string];
}


Όταν βρίσκουμε χαρακτήρες, τους προσθέτουμε απλά στη μεταβλητή μας ElementValue:

- (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
εάν ([elementName isEqualToString: @ "item"]) {
[άρθρα addObject: [αντίγραφο αντικειμένου]];
} αλλιώς {
[item setObject: ElementValue forKey: elementName];
}
}

Τι συμβαίνει όταν η ανάλυση είναι πλήρης

Όταν το πρόγραμμα ολοκληρώσει την επεξεργασία ενός στοιχείου, πρέπει να κάνει ένα από τα δύο πράγματα:

  • Εάν το τελικό στοιχείο είναι είδος, ολοκληρώσαμε την ομάδα μας, οπότε θα προσθέσουμε το λεξικό μας στη σειρά των άρθρων μας.
  • Εάν το στοιχείο δεν είναι είδος, θα ορίσουμε την τιμή στο λεξικό μας με ένα κλειδί που ταιριάζει με το όνομα του στοιχείου. (Αυτό σημαίνει ότι δεν χρειαζόμαστε μεμονωμένη μεταβλητή για κάθε πεδίο στο αρχείο XML. Μπορούμε να τα επεξεργαστούμε λίγο πιο δυναμικά.)

Αυτή είναι η τελευταία λειτουργία που απαιτείται για τη ρουτίνα ανάλυσης. τελειώνει το έγγραφο. Βάλτε έναν τελικό κωδικό εδώ ή καθορίστε μια υπορουτίνα διόρθωσης σφαλμάτων:

- (void) parserDidEndDocument: (NSXMLParser *) parser {
εάν (errorParsing == ΟΧΙ)
{
NSLog (@ "Η επεξεργασία XML ολοκληρώθηκε!");
} αλλιώς {
NSLog (@ "Παρουσιάστηκε σφάλμα κατά την επεξεργασία XML");
}
}

Αποθηκεύστε τα δεδομένα

Ένα πράγμα που πολλές εφαρμογές μπορεί να θέλουν να κάνουν εδώ είναι να αποθηκεύσουν τα δεδομένα ή το αρχείο XML σε ένα αρχείο στη συσκευή. Με αυτόν τον τρόπο, εάν η συσκευή δεν είναι συνδεδεμένη στο Διαδίκτυο την επόμενη φορά που θα φορτωθεί η εφαρμογή, θα εξακολουθήσει να λαμβάνει αυτές τις πληροφορίες.

Φυσικά, δεν μπορούμε να ξεχάσουμε το πιο σημαντικό μέρος: να πείτε στην εφαρμογή σας να αναλύσει το αρχείο (και να του δώσει μια διεύθυνση ιστού για να το βρει!). Για να ξεκινήσετε τη διαδικασία, προσθέστε αυτήν τη γραμμή κώδικα στο κατάλληλο μέρος όπου θέλετε να κάνετε την επεξεργασία XML:

 [self parseXMLFileAtURL: @ " http://www.webaddress.com/file.xml"]; 
instagram story viewer