Πώς να αναλύσετε την XML σε C ++

How Parse Xml C



Σε αυτό το άρθρο, θα συζητήσουμε τον τρόπο ανάλυσης της XML σε γλώσσα προγραμματισμού C ++. Θα δούμε αρκετά παραδείγματα εργασίας για να κατανοήσουμε τον μηχανισμό ανάλυσης XML στο C ++.

Τι είναι το XML;

XML είναι μια γλώσσα σήμανσης και χρησιμοποιείται κυρίως για την αποθήκευση και τη μεταφορά δεδομένων με οργανωμένο τρόπο. Το XML σημαίνει eXtensible Markup Language. Είναι πολύ παρόμοιο με το HTML. Το XML επικεντρώνεται πλήρως στην αποθήκευση και μεταφορά των δεδομένων, ενώ το HTML χρησιμοποιείται για την εμφάνιση των δεδομένων στο πρόγραμμα περιήγησης.







Ένα δείγμα αρχείου XML/σύνταξης XML

Ακολουθεί ένα δείγμα αρχείου XML:



εκδοχή='1.0' κωδικοποίηση='utf-8'?>

>>

τύπος μαθητή='Μερικής απασχόλησης'>>

>>Κάποιος>>

>>

τύπος μαθητή='Πλήρης απασχόληση'>>

>>Ντρέικ>>

>>

>>

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



Ανάλυση βιβλιοθηκών σε C ++:

Υπάρχουν διάφορες βιβλιοθήκες για την ανάλυση δεδομένων XML στις περισσότερες από τις γλώσσες προγραμματισμού υψηλού επιπέδου. Η C ++ δεν αποτελεί εξαίρεση. Ακολουθούν οι πιο δημοφιλείς βιβλιοθήκες C ++ για την ανάλυση δεδομένων XML:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Όπως υποδηλώνει το όνομα, το RapidXML επικεντρώνεται κυρίως στην ταχύτητα και είναι μια βιβλιοθήκη ανάλυσης στυλ DOM. Το PugiXML υποστηρίζει τη μετατροπή Unicode. Μπορεί να θέλετε να χρησιμοποιήσετε το PugiXML εάν θέλετε να μετατρέψετε το έγγραφο UTF-16 σε UTF-8. Το TinyXML είναι μια ελάχιστη έκδοση για την ανάλυση δεδομένων XML και όχι τόσο γρήγορα σε σύγκριση με τα δύο προηγούμενα. Εάν θέλετε να ολοκληρώσετε τη δουλειά και δεν σας ενδιαφέρει η ταχύτητα, μπορείτε να επιλέξετε TinyXML.

Παραδείγματα
Τώρα, έχουμε μια βασική κατανόηση των βιβλιοθηκών ανάλυσης XML και XML στο C ++. Ας δούμε τώρα μερικά παραδείγματα για την ανάλυση του αρχείου xml στο C ++:



  • Παράδειγμα-1: Ανάλυση XML σε C ++ χρησιμοποιώντας RapidXML
  • Παράδειγμα-2: Ανάλυση XML σε C ++ χρησιμοποιώντας PugiXML
  • Παράδειγμα-3: Ανάλυση XML σε C ++ χρησιμοποιώντας TinyXML

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

Παράδειγμα-1: Ανάλυση XML σε C ++ χρησιμοποιώντας RapidXML

Σε αυτό το παράδειγμα προγράμματος, θα δείξουμε τον τρόπο ανάλυσης xml χρησιμοποιώντας τη βιβλιοθήκη RapidXML σε C ++. Εδώ είναι το αρχείο εισόδου XML (sample.xml):

εκδοχή='1.0' κωδικοποίηση='utf-8'?>

>>

τύπος μαθητή='Μερικής απασχόλησης'>>

>>Γιάννης>>

>>

τύπος μαθητή='Πλήρης απασχόληση'>>

>>Σον>>

>>

τύπος μαθητή='Μερικής απασχόλησης'>>

>>Σάρα>>

>>

>>

Ο στόχος μας εδώ είναι να αναλύσουμε το παραπάνω αρχείο XML χρησιμοποιώντας C ++. Εδώ είναι το πρόγραμμα C ++ για την ανάλυση δεδομένων XML χρησιμοποιώντας RapidXML. Μπορείτε να κατεβάσετε τη βιβλιοθήκη RapidXML από Εδώ Το

#περιλαμβάνω
#περιλαμβάνω
#περιλαμβάνω
#include 'Rapidxml.hpp'

χρησιμοποιώντας ονομαστικου χωρουώρες?
χρησιμοποιώντας ονομαστικου χωρουRapidxml?


xml_documentέγγρ
xml_node *root_node= ΜΗΔΕΝΙΚΟ?

intκύριος(κενός)
{
κόστος << ' nΑνάλυση δεδομένων μαθητών μου (sample.xml) ..... ' <<endl?

// Διαβάστε το αρχείο sample.xml
ifstream το αρχείο('sample.xml')?
διάνυσμα<απανθρακώνω>>ρυθμιστής((istreambuf_iterator<απανθρακώνω>>(το αρχείο)), istreambuf_iterator<απανθρακώνω>>())?
ρυθμιστής.push_back(' 0')?

// Αναλύστε το buffer
έγγρ.αναλύω πρόταση<0>>(&ρυθμιστής[0])?

// Μάθετε τον ριζικό κόμβο
root_node=έγγρ.first_node('MyStudentsData')?

// Επαναλάβετε τους κόμβους των μαθητών
Για (xml_node *φοιτητικός_κόμβος=root_node->>first_node('Μαθητης σχολειου')?φοιτητικός_κόμβος?φοιτητικός_κόμβος=φοιτητικός_κόμβος->>next_sibling())
{
κόστος << ' nΤύπος μαθητή = ' <<φοιτητικός_κόμβος->>first_attribute('τύπος μαθητή')->>αξία()?
κόστος <<endl?

// Ενσωματώστε τα ονόματα των μαθητών
Για(xml_node *κόμβος_ονοματεπώνυμου=φοιτητικός_κόμβος->>first_node('Ονομα')?κόμβος_ονοματεπώνυμου?κόμβος_ονοματεπώνυμου=κόμβος_ονοματεπώνυμου->>next_sibling())
{
κόστος << 'Όνομα μαθητή =' <<κόμβος_ονοματεπώνυμου->>αξία()?
κόστος <<endl?
}
κόστος <<endl?
}

ΕΠΙΣΤΡΟΦΗ 0?
}

Παράδειγμα-2: Ανάλυση XML σε C ++ χρησιμοποιώντας PugiXML

Σε αυτό το παράδειγμα προγράμματος, θα δείξουμε τον τρόπο ανάλυσης xml χρησιμοποιώντας τη βιβλιοθήκη PugiXML σε C ++. Εδώ είναι το αρχείο εισόδου XML (sample.xml):

εκδοχή='1.0' κωδικοποίηση='UTF-8' αυτόνομο='όχι' ?>

FormatVersion='1'>>

>>

Ονομα='Γιάννης' Τύπος='Μερικής απασχόλησης'>>

>>

Ονομα='Sean' Τύπος='Πλήρης απασχόληση'>>

>>

Ονομα='Σάρα' Τύπος='Μερικής απασχόλησης'>>

>>

>>

>>

Σε αυτό το παράδειγμα προγράμματος, θα δείξουμε τον τρόπο ανάλυσης xml χρησιμοποιώντας τη βιβλιοθήκη pugixml σε C ++. Μπορείτε να κατεβάσετε τη βιβλιοθήκη PugiXML από Εδώ Το

#περιλαμβάνω
#include 'pugixml.hpp'

χρησιμοποιώντας ονομαστικου χωρουώρες?
χρησιμοποιώντας ονομαστικου χωρουpugi?

intκύριος()
{
κόστος << ' nΑνάλυση δεδομένων εργαζομένων (sample.xml) ..... n n'?


έγγραφο xml_document?

// φορτώστε το αρχείο XML
αν (!έγγρ.αρχείο_φόρτωσης('sample.xml')) ΕΠΙΣΤΡΟΦΗ -1?

εργαλεία xml_node=έγγρ.παιδί('EmployeesData')Τοπαιδί('Υπαλλήλους')?


Για (xml_node_iterator it=εργαλεία.να αρχίσει()?το!=εργαλεία.τέλος()? ++το)
{
κόστος << 'Υπαλλήλους:'?

Για (xml_attribute_iterator ait=το->>attributes_begin()?που ανήκουν!=το->>χαρακτηριστικά_κλείσιμο()? ++που ανήκουν)
{
κόστος << '' <<που ανήκουν->>όνομα() << '=' <<που ανήκουν->>αξία()?
}

κόστος <<endl?
}

κόστος <<endl?

ΕΠΙΣΤΡΟΦΗ 0?

}

Παράδειγμα-3: Ανάλυση XML σε C ++ χρησιμοποιώντας TinyXML

Σε αυτό το παράδειγμα προγράμματος, θα δείξουμε τον τρόπο ανάλυσης xml χρησιμοποιώντας τη βιβλιοθήκη TinyXML σε C ++. Εδώ είναι το αρχείο εισόδου XML (sample.xml):

εκδοχή='1.0' κωδικοποίηση='utf-8'?>

>>

>>Γιάννης>>

>>Σον>>

>>Σάρα>>

>>

Σε αυτό το παράδειγμα προγράμματος, θα δείξουμε τον τρόπο ανάλυσης xml χρησιμοποιώντας τη βιβλιοθήκη TinyXML σε C ++. Μπορείτε να κατεβάσετε τη βιβλιοθήκη TinyXML από Εδώ Το

#περιλαμβάνω
#περιλαμβάνω
#περιλαμβάνω
#include 'tinyxml2.cpp'

χρησιμοποιώντας ονομαστικου χωρουώρες?
χρησιμοποιώντας ονομαστικου χωρουtinyxml2?


intκύριος(κενός)
{
κόστος << ' nΑνάλυση δεδομένων μαθητών μου (sample.xml) ..... ' <<endl?

// Διαβάστε το αρχείο sample.xml
Έγγραφο XMLDocument?
έγγρ.LoadFile( 'sample.xml' )?

const απανθρακώνω*τίτλος=έγγρ.FirstChildElement( 'MyStudentsData' )->>FirstChildElement( 'Μαθητης σχολειου' )->>GetText()?
printf( 'Όνομα μαθητή: %s n', τίτλος)?


XMLText*textNode=έγγρ.LastChildElement( 'MyStudentsData' )->>LastChildElement( 'Μαθητης σχολειου' )->>Πρώτο παιδί()->>Σε κείμενο()?
τίτλος=textNode->>αξία()?
printf( 'Όνομα μαθητή: %s n', τίτλος)?


ΕΠΙΣΤΡΟΦΗ 0?
}

συμπέρασμα

Σε αυτό το άρθρο, έχουμε συζητήσει εν συντομία XML και εξέτασε τρία διαφορετικά παραδείγματα για τον τρόπο ανάλυσης της XML σε C ++. Το TinyXML είναι μια μινιμαλιστική βιβλιοθήκη για την ανάλυση δεδομένων XML. Οι περισσότεροι προγραμματιστές χρησιμοποιούν κυρίως το RapidXML ή το PugiXML για την ανάλυση δεδομένων XML.