Τρόποι επεξεργασίας xml σε c. Πώς να ανοίξετε ένα έγγραφο XML - δυνατότητες εργασίας με αρχεία XML. Δημιουργία στοιχείου XML με παιδιά




Επεκτάσιμη γλώσσα σήμανσης (XML). Αυτά είναι στην πραγματικότητα απλώς αρχεία κειμένου που χρησιμοποιούν προσαρμοσμένες ετικέτες για να περιγράψουν τη δομή και άλλες λειτουργίες του εγγράφου.

Τι είναι το XML

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

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

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

Ουσιαστικά, η HTML είναι μια γλώσσα που εστιάζει στην παρουσίαση περιεχομένου, ενώ η XML είναι μια ειδική γλώσσα περιγραφής δεδομένων που χρησιμοποιείται για την αποθήκευση δεδομένων.

Η XML χρησιμοποιείται συχνά ως βάση για άλλες μορφές εγγράφων, από τις οποίες υπάρχουν εκατοντάδες. Εδώ είναι μερικά που ίσως θέλετε να μάθετε:

  • Το RSS και το ATOM περιγράφουν τον τρόπο με τον οποίο οι εφαρμογές πρέπει να χειρίζονται τις τροφοδοσίες Ιστού.
  • Το Microsoft .NET χρησιμοποιεί XML για τα αρχεία διαμόρφωσής του.
  • Το Microsoft Office χρησιμοποιεί XML ως βάση για τη δομή εγγράφων.

Έτσι, εάν έχετε ένα αρχείο XML, δεν σας λέει απαραίτητα για ποια εφαρμογή προορίζεται. Ωστόσο, δεν χρειάζεται να ανησυχείτε για αυτό, εκτός εάν αναπτύσσετε αρχεία XML.

Πώς να ανοίξετε ένα αρχείο XML

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

Χρησιμοποιήστε ένα πρόγραμμα επεξεργασίας κειμένου όταν εργάζεστε με XML τακτικά

Δεδομένου ότι τα αρχεία XML είναι απλά αρχεία κειμένου, μπορούν να ανοίξουν σε οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου. Ωστόσο, πολλοί επεξεργαστές κειμένου, όπως το Σημειωματάριο, απλά δεν έχουν σχεδιαστεί για να εμφανίζουν αρχεία XML με τη σωστή δομή τους. Αυτό μπορεί να είναι χρήσιμο για γρήγορη εξοικείωση με τα περιεχόμενα ενός αρχείου XML. Ωστόσο, υπάρχουν πιο βολικά εργαλεία για να δουλέψετε μαζί τους.


Χρήση προγράμματος περιήγησης Ιστού για προβολή αρχείου XML

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

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

Όταν ανοίξει το αρχείο, θα πρέπει να δείτε καλά δομημένα δεδομένα. Δεν είναι τόσο όμορφο όσο η χρωματική εμφάνιση που έχετε στο Notepad++, αλλά είναι πολύ καλύτερο από το σημειωματάριο.

Χρήση διαδικτυακού επεξεργαστή για αρχεία XML

Εάν θέλετε να επεξεργαστείτε ένα τυχαίο αρχείο XML και δεν θέλετε να κατεβάσετε ένα νέο πρόγραμμα επεξεργασίας κειμένου ή χρειάζεστε μετατρέψτε το αρχείο xml σε άλλη μορφήΥπάρχουν αρκετοί αξιοπρεπείς διαδικτυακοί επεξεργαστές XML που διατίθενται δωρεάν.

TutorialsPoint.com, XMLGrid.net και CodeBeautify.org - Σας επιτρέπουν να προβάλλετε και να επεξεργάζεστε αρχεία XML. Μόλις ολοκληρωθεί η επεξεργασία, μπορείτε να κάνετε λήψη του τροποποιημένου αρχείου XML ή ακόμα και να το μετατρέψετε σε διαφορετική μορφή.

Για παράδειγμα, χρησιμοποιούμε το CodeBeautify.org. Η σελίδα χωρίζεται σε τρεις ενότητες. Στα αριστερά βρίσκεται το αρχείο XML με το οποίο εργάζεστε. Στη μέση θα βρείτε αρκετές λειτουργίες. Στα δεξιά θα δείτε τα αποτελέσματα ορισμένων από τις επιλογές που μπορείτε να επιλέξετε.

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

Χρησιμοποιήστε το κουμπί Αναζήτηση για να φορτώσετε ένα αρχείο XML από τον υπολογιστή σας ή το κουμπί Φόρτωση URL για να ανακτήσετε XML από μια ηλεκτρονική πηγή

Το κουμπί Tree View εμφανίζει τα δεδομένα σε μια καλά διαμορφωμένη δομή δέντρου στο παράθυρο αποτελεσμάτων, με όλες τις ετικέτες να επισημαίνονται με πορτοκαλί χρώμα και τα χαρακτηριστικά στα δεξιά των ετικετών.

Το Beatify εμφανίζει τα δεδομένα σας σε μια τακτοποιημένη, ευανάγνωστη μορφή.

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

Τέλος, μπορείτε να χρησιμοποιήσετε το κουμπί XML σε JSON για να μετατρέψετε τη μορφή XML σε JSON και το κουμπί Εξαγωγή σε CSV για να αποθηκεύσετε τα δεδομένα ως αρχείο τιμών διαχωρισμένων με κόμματα ή το κουμπί Λήψη για να πραγματοποιήσετε λήψη τυχόν αλλαγών που κάνατε στο νέο Αρχείο XML.

Πιθανότατα έχετε ακούσει για την XML και γνωρίζετε πολλούς λόγους για τους οποίους πρέπει να χρησιμοποιείται στον οργανισμό σας. Τι είναι όμως ακριβώς η XML; Αυτό το άρθρο εξηγεί τι είναι η XML και πώς λειτουργεί.

Σε αυτό το άρθρο

Σήμανση, σήμανση και ετικέτες

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

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

Το κείμενο HTML αυτού του άρθρου είναι ένα καλό παράδειγμα της χρήσης σήμανσης υπολογιστή. Εάν κάνετε δεξί κλικ σε αυτήν τη σελίδα στον Microsoft Internet Explorer και επιλέξτε Προβολή κώδικα HTML, θα δείτε ευανάγνωστο κείμενο και ετικέτες HTML όπως

ΚΑΙ

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

...

) και τη θέση των σχεδίων.

Χαρακτηριστικά της XML

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

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

Λάβετε υπόψη τα ακόλουθα κατά την εργασία:

    Η HTML δεν μπορεί να χρησιμοποιηθεί αντί για XML. Ωστόσο, τα δεδομένα XML μπορούν να περικλείονται σε ετικέτες HTML και να εμφανίζονται σε ιστοσελίδες.

    Οι δυνατότητες HTML περιορίζονται σε ένα προκαθορισμένο σύνολο ετικετών που είναι κοινά σε όλους τους χρήστες.

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

    Izzy σιαμαίος 6 Ναί όχι Izz138bod Κόλιν Γουίλκοξ

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

Αλλά μην συγχέετε τις ετικέτες σε αυτό το παράδειγμα με τις ετικέτες στο αρχείο HTML. Για παράδειγμα, εάν το παραπάνω κείμενο XML επικολληθεί σε ένα αρχείο HTML και ανοίξει σε ένα πρόγραμμα περιήγησης, τα αποτελέσματα θα μοιάζουν με αυτό:

Izzy Siamese 6 ναι όχι Izz138bod Colin Wilcox

Το πρόγραμμα περιήγησης ιστού θα αγνοήσει τις ετικέτες XML και θα εμφανίσει μόνο τα δεδομένα.

Καλά διαμορφωμένα δεδομένα

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

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

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

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

Σχέδιο

Μην σας τρομάζει ο όρος «σχέδιο». Ένα σχήμα είναι απλώς ένα αρχείο XML που περιέχει κανόνες για τα περιεχόμενα του αρχείου δεδομένων XML. Τα αρχεία σχήματος έχουν συνήθως την επέκταση XSD, ενώ τα αρχεία δεδομένων XML χρησιμοποιούν την επέκταση XML.

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

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

Μην ανησυχείτε αν το παράδειγμα δεν είναι ξεκάθαρο. Απλώς δώστε προσοχή στα εξής:

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

    Οι δηλώσεις είναι ένα ισχυρό μέσο χειρισμού της δομής δεδομένων. Για παράδειγμα, μια διαφήμιση σημαίνει ότι ετικέτες όπως Και , πρέπει να ακολουθήσει με την παραπάνω σειρά. Οι διαφημίσεις μπορούν επίσης να επικυρώσουν τους τύπους εισαγωγής χρηστών. Για παράδειγμα, το παραπάνω κύκλωμα απαιτεί μια θετική είσοδο ακέραιου αριθμού για την ηλικία της γάτας και τις τιμές Boole (TRUE ή FALSE) για τις ετικέτες ALTERED και DECLAWED.

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

Μεταμορφώσεις

Όπως αναφέρθηκε παραπάνω, η XML επιτρέπει επίσης την αποτελεσματική χρήση και επαναχρησιμοποίηση δεδομένων. Ο μηχανισμός για την επαναχρησιμοποίηση δεδομένων ονομάζεται μετασχηματισμός XSLT (ή απλά μετασχηματισμός).

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

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

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

Ονομα Ράτσα Ηλικία Τροποποιημένο Declawed Αδεια Ιδιοκτήτης

Αυτό το παράδειγμα δείχνει πώς μπορεί να μοιάζει το κείμενο ενός τύπου μετασχηματισμού, αλλά να θυμάστε ότι μπορεί να περιοριστείτε σε μια σαφή περιγραφή του τι χρειάζεστε από τα δεδομένα και αυτή η περιγραφή μπορεί να γίνει στη μητρική σας γλώσσα. Για παράδειγμα, μπορείτε να πάτε στο τμήμα πληροφορικής και να πείτε ότι πρέπει να εκτυπώσουν δεδομένα πωλήσεων για συγκεκριμένες περιοχές για τα τελευταία δύο χρόνια και ότι οι πληροφορίες θα πρέπει να μοιάζουν με αυτό και το άλλο. Το τμήμα μπορεί στη συνέχεια να γράψει (ή να τροποποιήσει) έναν μετασχηματισμό για να εκπληρώσει το αίτημά σας.

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

XML στο σύστημα Microsoft Office

Οι επαγγελματικές εκδόσεις του Office παρέχουν βελτιωμένη υποστήριξη XML. Ξεκινώντας με το σύστημα Microsoft Office 2007, το Microsoft Office χρησιμοποιεί μορφές αρχείων που βασίζονται σε XML, όπως DOCX, XLSX και PPTX. Επειδή η XML αποθηκεύει δεδομένα σε μορφή κειμένου και όχι σε ιδιόκτητη δυαδική μορφή, οι πελάτες μπορούν να ορίσουν τα δικά τους σχήματα και να χρησιμοποιήσουν τα δεδομένα σας με διάφορους τρόπους χωρίς να χρειάζεται να πληρώσουν δικαιώματα εκμετάλλευσης. Για περισσότερες πληροφορίες σχετικά με τις νέες μορφές, ανατρέξτε στην ενότητα Άνοιγμα μορφών XML και επεκτάσεων ονομάτων αρχείων. Παρακάτω υπάρχουν άλλα οφέλη.

Όλα αυτά είναι υπέροχα, αλλά τι γίνεται αν έχετε δεδομένα XML χωρίς σχήμα; Αυτό εξαρτάται από το πρόγραμμα του Office που χρησιμοποιείτε. Για παράδειγμα, όταν ανοίγετε ένα αρχείο XML χωρίς σχήμα στο Excel, προϋποθέτει ότι το σχήμα υπάρχει και σας επιτρέπει να φορτώσετε τα δεδομένα σε έναν πίνακα XML. Μπορείτε να χρησιμοποιήσετε λίστες και πίνακες XML για ταξινόμηση, φιλτράρισμα και υπολογισμό δεδομένων.

Ενεργοποιήστε τις δυνατότητες XML στο Office

Από προεπιλογή, η καρτέλα Προγραμματιστής δεν είναι ορατή. Πρέπει να προστεθεί στην κορδέλα για να χρησιμοποιηθούν εντολές XML στο Office.

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

αρχείο XML που χρησιμοποιείται για το παράδειγμα.

Mazda 2007 BMW 2009

xml dom

Προς το παρόν, το αρχείο μας περιέχει την ακόλουθη δομή:

Σχέση μεταξύ κόμβων σε XML DOM, βασικές στιγμές:

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

Πώς να αποκτήσετε το γονικό στοιχείο xml του αυτοκινήτου;

Console.WriteLine(elmRoot["αυτοκίνητο"].ParentNode.Name); //Αποτέλεσμα: γκαράζ

2. Ένας γονέας μπορεί να έχει παιδιά ChildNodes. Για παράδειγμα, για τον κόμβο γκαράζ τα παιδιά είναι και τα δύο στοιχεία αυτοκινήτου. Τα στοιχεία του αυτοκινήτου έχουν επίσης παιδικό μοντέλο και έτος.

ChildNodes, είναι μια συλλογή που αποθηκεύει όλα τα θυγατρικά στοιχεία xml· για να αποκτήσετε πρόσβαση στο επιθυμητό στοιχείο, πρέπει να καθορίσετε το ευρετήριό του. (Ο δείκτης ξεκινά πάντα από το μηδέν!)

Για παράδειγμα: πώς να αποκτήσετε το στοιχείο πρώτου παιδιού;

ElmRoot.ChildNodes;

3. Όπως στη συνηθισμένη ζωή, ένα παιδί μπορεί να γεννηθεί πρώτο Πρώτο παιδί ή τελευταίο Τελευταίο.

Αν πάρουμε ως παράδειγμα το στοιχείο του αυτοκινήτου, τότε

Το FirstChild είναι μοντέλο Το LastChild είναι έτος

4. Με τη σειρά τους, υπάρχουν και συνδέσεις μεταξύ των παιδικών στοιχείων· μπορεί να είναι αδέρφια ή αδερφές, αν κάνουμε παραλληλισμούς με την πραγματική ζωή.

Ένα παιδί μπορεί να έχει, για παράδειγμα, έναν προηγούμενο αδελφό και έναν επόμενο αδελφό αδελφό

Console.WriteLine(elmRoot.ChildNodes.FirstChild.NextSibling.Name); //Αποτέλεσμα: έτος Console.WriteLine(elmRoot.ChildNodes.LastChild.PreviousSibling.Name); //Αποτέλεσμα: μοντέλο

Εάν το στοιχείο δεν βρεθεί, τότε δημιουργείται μια εξαίρεση: NullReferenceException, επομένως όταν εργάζεστε με xml, χρησιμοποιείτε πάντα τα μπλοκ try catch.

Console.WriteLine(elmRoot.ChildNodes. LastChild.NextSibling.Name); Console.WriteLine(elmRoot.ChildNodes. FirstChild.PreviousSibling.Name);

Το LastChild είναι το NextSibling.
Το FirstChild είναι PreviousSibling.

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

Πώς να λάβετε την τιμή ενός στοιχείου xml;

Η τιμή xml ενός στοιχείου μπορεί να ληφθεί χρησιμοποιώντας την ιδιότητα InnerText, για παράδειγμα:

Console.WriteLine(elmRoot["αυτοκίνητο"].FirstChild.InnerText); //Αποτέλεσμα: Mazda

Ένας άλλος τρόπος για να λάβετε την ίδια τιμή στοιχείου xml:

Console.WriteLine(elmRoot.FirstChild.FirstChild.InnerText); //Αποτέλεσμα: Mazda

Η ακολουθία των κινήσεων κατά μήκος του δέντρου DOM:

Γκαράζ -> αυτοκίνητο -> μοντέλο -> Mazda

Παίρνουμε το έτος:

ElmRoot["αυτοκίνητο"].LastChild.InnerText; //Αποτέλεσμα: 2007

Ακολουθία:

Γκαράζ -> αυτοκίνητο -> έτος -> 2007

Ένα άλλο παράδειγμα: 3 τρόποι για να έχετε το ίδιο αποτέλεσμα.

Console.WriteLine(elmRoot.LastChild.FirstChild.InnerText); Console.WriteLine(elmRoot["αυτοκίνητο"].NextSibling.FirstChild.InnerText); Console.WriteLine(elmRoot.ChildNodes.Item(1).FirstChild.InnerText); //Αποτέλεσμα: BMW

Εάν πρέπει να λάβετε το έτος για ένα στοιχείο με την τιμή Mazda:

Console.WriteLine(elmRoot.FirstChild.LastChild.InnerText); //Αποτέλεσμα: 2007

Για BMW (με δύο τρόπους, λάβετε το ίδιο αποτέλεσμα)

Console.WriteLine(elmRoot.ChildNodes.Item(1).ChildNodes.Item(1).InnerText); Console.WriteLine(elmRoot.ChildNodes.ChildNodes.InnerText); //Αποτέλεσμα: 2009

Πώς να αλλάξετε τις τιμές των στοιχείων xml;

Χρήση ιδιοκτησίας InnerText()Μπορείτε να λάβετε και να αλλάξετε την τιμή ενός στοιχείου xml, για παράδειγμα, να αλλάξετε το έτος.

//Ορίστε μια νέα τιμή elmRoot.FirstChild.LastChild.InnerText = "2010"; //Εμφάνιση της νέας τιμής στην οθόνη της κονσόλας Console.WriteLine(elmRoot.FirstChild.ChildNodes.Item(1).InnerText); //Αποτέλεσμα: 2010

Ταυτόχρονα, πρέπει να θυμάστε ότι όλες οι αλλαγές γίνονται με το εικονικό αρχείο xml· εάν ανοίξετε το φυσικό αρχείο, θα δείτε ότι το έτος 2007 εξακολουθεί να εμφανίζεται σε αυτό.

Για να τεθούν σε ισχύ οι αλλαγές, πρέπει να χρησιμοποιήσετε τη μέθοδο Αποθήκευση, για παράδειγμα:

ElmRoot.Save("όνομα αρχείου xml ή ροή");

Τώρα οι πληροφορίες θα αλλάξουν στο "φυσικό" αρχείο xml.

Πώς να λάβετε τον αριθμό των θυγατρικών στοιχείων;

Console.WriteLine(elmRoot.FirstChild.ChildNodes.Count);

γκαράζ -> αυτοκίνητο περιέχει 2 παιδιά: μοντέλο και έτος

Console.WriteLine(elmRoot.FirstChild.FirstChild.ChildNodes.Count);

γκαράζ -> αυτοκίνητο -> το μοντέλο περιέχει 1 παιδί xml στοιχείο.

Πρόσβαση σε Child Elements

κατά ευρετήριο

ElmRoot.ChildNodes.Name; elmRoot.ChildNodes.Name; //Αποτέλεσμα: αυτοκίνητο

Χρησιμοποιώντας βρόχο

Foreach (XmlNode nod in elmRoot.ChildNodes) ( Console.WriteLine(nod.Name); ) //Αποτέλεσμα: αυτοκίνητο, αυτοκίνητο

Πώς να αποκτήσετε το όνομα στοιχείου xml;

elmRoot.Name; //Αποτέλεσμα: γκαράζ

Δημιουργία νέου στοιχείου XML

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

Κατά τη δημιουργία ενός νέου στοιχείου, θα χρησιμοποιήσουμε τη σύσταση από τον ιστότοπο msdn και αντί για το τυπικό νέο XmlElement θα χρησιμοποιήσουμε τη μέθοδο CreateElement.

XmlElement φτελιά = xmlDoc.CreateElement("bus");

Δημιουργία και προσθήκη νέου στοιχείου xml

Ας δημιουργήσουμε ένα νέο στοιχείο xml με το όνομα "BUS".

XmlElement elmRoot = xmlDoc.DocumentElement; Console.WriteLine(elmRoot.ChildNodes.Count); //αυτοκίνητο, αυτοκίνητο XmlElement elmNew = xmlDoc.CreateElement("bus"); elmRoot.AppendChild(elmNew); Console.WriteLine(elmRoot.ChildNodes.Count); //3 αυτοκίνητο, αυτοκίνητο, λεωφορείο xmlDoc.Save("όνομα αρχείου xml");

Εξήγηση:

1. Αρχικά παίρνουμε ένα ριζικό στοιχείο στο οποίο θα επισυνάψουμε νέα στοιχεία.

2. Ως έλεγχος, θα εμφανίσουμε τον τρέχοντα αριθμό θυγατρικών στοιχείων του στοιχείου γκαράζ: 2 (αυτοκίνητο και αυτοκίνητο)

3. Δημιουργήστε ένα νέο στοιχείο BUS

4. Χρησιμοποιώντας τη μέθοδο AppendChildπροσθέτοντας ένα νέο στοιχείο στο δέντρο

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

6. Για αλλαγές που επηρεάζουν το φυσικό αρχείο, αποθηκεύστε

Στο ίδιο το αρχείο XML, το νέο στοιχείο θα μοιάζει με αυτό:

Πώς να προσθέσετε ένα νέο στοιχείο xml;

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

String strFilename = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(strΌνομα αρχείου); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmNew = xmlDoc.CreateElement("bus"); XmlText new_txt = xmlDoc.CreateTextNode("2006"); elmRoot.AppendChild(elmNew); elmRoot.LastChild.AppendChild(new_txt); Console.WriteLine(elmRoot.ChildNodes.Name); //bus Console.WriteLine(elmRoot.ChildNodes.LastChild.InnerText); //2006 Console.Read();

Σε αρχείο XML:

2006

Για λογους σαφηνειας

Τώρα ας δημιουργήσουμε έναν κόμβο «λεωφορείου» με την ίδια αρχιτεκτονική με το αυτοκίνητο, δηλαδή προσθέτουμε κόμβους: μοντέλο, έτος και κάποιο περιεχόμενο κειμένου.

Δημιουργία στοιχείου XML με παιδιά

string strΌνομα αρχείου = @"C:\lessons\Auto.xml"; //δημιουργία νέου εγγράφου xml στη μνήμη XmlDocument xmlDoc = new XmlDocument(); //φόρτωση του αρχείου xml στη μνήμη xmlDoc.Load(strFilename); //Λήψη του ριζικού στοιχείου XmlElement elmRoot = xmlDoc.DocumentElement; //Δημιουργία 3 στοιχείων: δίαυλος, μοντέλο, έτος XmlElement elmBUS = xmlDoc.CreateElement("bus"); XmlElement elmModel = xmlDoc.CreateElement("model"); XmlElement elmYear = xmlDoc.CreateElement("έτος"); //Ορισμός τιμών για στοιχεία: μοντέλο, έτος XmlText year_txt = xmlDoc.CreateTextNode("2006"); //XmlText mod_txt = xmlDoc.CreateTextNode("liaz"); Προσθήκη διαφορετικά //Προσθήκη δύο θυγατρικών στοιχείων στο στοιχείο διαύλου: μοντέλο και έτος elmBUS.AppendChild(elmModel); elmBUS.AppendChild(elmYear); //Προσθήκη τιμών στους κόμβους μοντέλου και έτους elmModel.InnerText = "liaz"; elmYear.AppendChild(year_txt); //Προσθήκη νέου διαύλου στοιχείου xml στο δέντρο elmRoot.AppendChild(elmBUS); //Ελέγξτε αν όλα έχουν προστεθεί όπως θα έπρεπε Console.WriteLine(elmRoot.ChildNodes.FirstChild.InnerText); Console.WriteLine(elmRoot.LastChild.LastChild.InnerText); //Εάν όλα είναι εντάξει, χρησιμοποιήστε τη μέθοδο Save xmlDoc.Save("όνομα αρχείου xml");

Αποτέλεσμα:

λιαζ 2006

Πώς μπορώ να συντομεύσω αυτόν τον κωδικό; Για παράδειγμα, ως εξής:

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(PathXmlFile); XmlElement elmRoot = xmlDoc.DocumentElement; XmlElement elmBUS = xmlDoc.CreateElement("bus"); XmlElement elmModel = xmlDoc.CreateElement("model"); XmlElement elmYear = xmlDoc.CreateElement("έτος"); //Προσθήκη τιμών στους κόμβους μοντέλου και έτους elmModel.InnerText = "liaz"; elmYear.InnerText = "2006"; elmBUS.AppendChild(elmModel); elmBUS.AppendChild(elmYear); elmRoot.AppendChild(elmBUS); //Εάν όλα είναι σωστά, τότε καλέστε τη μέθοδο Save xmlDoc.Save("όνομα αρχείου xml");

Ας συντομεύσουμε τον κώδικα λίγο περισσότερο, για αυτό θα χρησιμοποιήσουμε την ιδιότητα InnerXml:

XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(PathXmlFile); XmlElement elmXML = xmlDoc.CreateElement("bus"); string txt = " λιαζ" + "2006"; //InnerXml! elmXML.InnerXml = txt; //xmlDoc.DocumentElement (θα είναι ίσο με το γκαράζ) - αυτός είναι ένας άλλος τρόπος πρόσβασης στο ριζικό στοιχείο, όπως το XmlElement elmRoot = xmlDoc.DocumentElement; xmlDoc.DocumentElement.AppendChild ( elmXML); xmlDoc.Save(PathXmlFile);

Αποτέλεσμα

Λάβετε μια λίστα στοιχείων χρησιμοποιώντας το GetElementByTagName

Το GetElementByTagName επιστρέφει XmlNodeList, το οποίο περιέχει όλα τα στοιχεία καταγωγής που ανήκουν στο καθορισμένο στοιχείο, για παράδειγμα, πρέπει να λάβουμε όλα τα μοντέλα αυτοκινήτων που είναι αποθηκευμένα στο γκαράζ:

XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(strΌνομα αρχείου); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); foreach (Κόμβος XmlNode στο modelName) ( Console.WriteLine(node.InnerText); ) //Αποτέλεσμα: mazda, bmw, liaz

Πρόσβαση με χρήση ευρετηρίου:

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(PathXmlFile); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); Console.WriteLine(modelName.InnerText); //Αποτέλεσμα: liaz

Πώς μπορώ να αλλάξω το περιεχόμενο κειμένου ενός στοιχείου "διαύλου" που δημιουργήθηκε πρόσφατα χρησιμοποιώντας τη μέθοδο GetElementByTagName;

String PathXmlFile = @"C:\lessons\Auto.xml"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(PathXmlFile); XmlNodeList modelName = xmlDoc.GetElementsByTagName("model"); Console.WriteLine(modelName.InnerText); //Έλαβε την τιμή: liaz

Ή μπορείτε να αλλάξετε το όνομα liaz σε Ikarus

Console.WriteLine(modelName.InnerText = "Ikarus");

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


Γιατί πρέπει να δουλεύουμε με XML;

Εάν δεν έχετε ακόμη πολύ καλή ιδέα για το τι είναι το XML, τότε σας συνιστώ να διαβάσετε το άρθρο "Το XML είναι σοβαρό και για μεγάλο χρονικό διάστημα" στο "KV" No. για το 2007. Για να εξοικονομήσετε χώρο για πιο σημαντικά πράγματα, η ίδια η μορφή XML δεν θα αναλυθεί εδώ.

Προτού αρχίσετε να εξοικειώνεστε με τον κώδικα του προγράμματος, πρέπει να απαντήσετε σε μια βασική ερώτηση: γιατί να συμπεριλάβετε την υποστήριξη XML στην αίτησή σας; Νομίζω ότι πολλοί άνθρωποι έχουν κάνει αυτή την ερώτηση σχετικά με πολλές τεχνολογίες και δεν συμπεριλήφθηκαν όλες στις εφαρμογές μετά την απάντηση. Ωστόσο, με την XML η κατάσταση είναι κάπως διαφορετική και υπάρχουν πραγματικοί λόγοι για τη χρήση αυτής της μορφής σε πολλές περιπτώσεις.

Το κύριο πλεονέκτημα της XML είναι ότι, ως μορφή κειμένου από τη φύση της, επιτρέπει ωστόσο τέλεια την αποθήκευση και τη μετάδοση οποιωνδήποτε δεδομένων. Δεδομένου ότι αυτή η μορφή είναι κείμενο, το πρόβλημα της cross-platform της λύνεται από μόνο του και το πρόβλημα της μετάδοσης δεδομένων XML λύνεται εξίσου εύκολα (όπως, για παράδειγμα, γίνεται στο SOAP). Επιπλέον, μπορείτε εύκολα να αλλάξετε τη μορφή μεταφοράς ή αποθήκευσης δεδομένων προσθέτοντας νέα χαρακτηριστικά και χωρίς να ανησυχείτε πολύ για τη συμβατότητα με προηγούμενες εκδόσεις της μορφής, καθώς οι εφαρμογές που χρησιμοποιούν την παλιά έκδοση θα μπορούν να διαβάζουν ό,τι χρειάζονται χωρίς να δίνουν προσοχή σε νέες ετικέτες ή χαρακτηριστικά . Πολλές εφαρμογές χρησιμοποιούν μορφές αρχείων που βασίζονται σε XML, πολλά πρωτόκολλα μεταφοράς δεδομένων βασίζονται επίσης σε XML και οι λίστες και των δύο συνεχίζουν να αυξάνονται.

Φυσικά, από την άλλη πλευρά, η XML δεν είναι πολύ οικονομική, επειδή, όπως σωστά σημείωσε κάποτε ένας από τους επισκέπτες του φόρουμ Computer News, τα έγγραφα XML αποτελούνται συχνά από 10% δεδομένα και 90% ετικέτες. Ωστόσο, αυτό εξαρτάται σε μεγάλο βαθμό από τις ετικέτες που θα επιλέξετε. Μπορείς να γράψεις αγ. Melnikaite, 2, Μπορώ . Αν και, για να είμαι ειλικρινής, μου φαίνεται ότι με τους σημερινούς σκληρούς δίσκους και τα χοντρά κανάλια δεν έχει νόημα να συμπιέζεσαι ιδιαίτερα.

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

Για προγραμματισμό θα χρησιμοποιήσουμε την κύρια γλώσσα της πλατφόρμας .NET - C#. Προκειμένου όσο το δυνατόν περισσότεροι αναγνώστες να εξασκηθούν με τον συγκεκριμένο κώδικα προγράμματος, θα χρησιμοποιήσω την πρώτη έκδοση του C# και το .NET Framework.


Καταγραφή δεδομένων

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

Αρχικά, δημιουργήστε ένα νέο έργο στο Visual Studio, #Develop ή C# Builder και προσθέστε το System.Xml στη λίστα των εισαγόμενων χώρων ονομάτων.

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

String FileName = "c:\\demo.xml"; XmlTextWriter xml = νέο XmlTextWriter(FileName, System.Text.Encoding.Unicode); xml.Formatting = Formatting.Indented; xml.WriteStartDocument(); xml.WriteStartElement("rootelement"); για (int i = 0; i< 10; i++) { xml.WriteStartElement("subelement"); xml.WriteAttributeString("attrib1", "value1"); xml.WriteAttributeString("attrib2", i.ToString()); for (int j = 0; j < 10; j++){ xml.WriteStartElement("subsubelement"); xml.WriteAttributeString("attr", j.ToString()); xml.WriteEndElement(); } xml.WriteEndElement(); } xml.WriteEndElement(); xml.WriteEndDocument(); xml.Close();

Η πρώτη γραμμή, νομίζω, είναι αρκετά σαφής - είναι απλώς η εγγραφή του ονόματος του αρχείου στο οποίο θα αποθηκεύσουμε τα δεδομένα. Στη συνέχεια, δημιουργούμε ένα αντικείμενο τύπου XmlTextWriter (ονομάζεται, όπως μπορείτε να δείτε, xml) και με αυτό θα εκτελέσουμε όλες τις περαιτέρω λειτουργίες. Λάβετε υπόψη ότι κατά την κατασκευή ενός αντικειμένου, καθορίζουμε επίσης την κωδικοποίηση στην οποία θα γραφτεί η XML: στο παράδειγμά μας, αυτό είναι το Unicode. Η επόμενη γραμμή, γενικά, δεν απαιτείται, αλλά θα κάνει το έγγραφό μας XML, όπως λένε, αναγνώσιμο από τον άνθρωπο, δηλαδή θα προσθέσει τις απαραίτητες εσοχές και θα το σπάσει σε γραμμές. Χωρίς αυτό, ολόκληρο το έγγραφο θα ήταν γραμμένο σε μία γραμμή, η οποία, αν και εξοικονομεί χώρο, το καθιστά πρακτικά ακατάλληλο για χειροκίνητη επεξεργασία.

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

Τώρα που το έγγραφό μας XML έχει γραφτεί με επιτυχία, ας δούμε πώς μπορούμε να διαβάσουμε δεδομένα από αυτό.


Ανάγνωση δεδομένων

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

Ως συνήθως, ας εξοικειωθούμε πρώτα με τον κώδικα του προγράμματος και μετά θα δούμε τι ακριβώς κάνει αυτός ο κώδικας.

XmlTextReader xml = νέο XmlTextReader(FileName); xml.WhitespaceHandling = WhitespaceHandling.Καμία; int i = 0; while (xml.Read())( if ((xml.NodeType == XmlNodeType.Element) & (xml.Name == "υποστοιχείο")) ( listBox1.Items.Add("υποστοιχείο " + i + " βρέθηκε") ; i++; listBox1.Items.Add(" " + xml.GetAttribute("attrib1")); listBox1.Items.Add(" " + xml.GetAttribute("attrib2")); ενώ (xml.Read()&( xml.Name == "υποστοιχείο"))( listBox1.Items.Add(" " + xml.GetAttribute("attr")); ) ) ) xml.Close();

Για την ανάγνωση, όπως ίσως έχετε παρατηρήσει, χρησιμοποιούμε μια άλλη κλάση, το XmlTextReader. Βρίσκεται στον ίδιο χώρο ονομάτων με την κλάση που χρησιμοποιήσαμε για να γράψουμε τα δεδομένα. Στην πρώτη γραμμή, δημιουργούμε μια παρουσία του XmlTextReader, που ονομάζεται xml (εδώ υποθέτουμε ότι η μεταβλητή FileName είχε ήδη οριστεί από εμάς νωρίτερα). γραμμή στο απόσπασμα κώδικα παρακάτω. Η μεταβλητή i χρησιμοποιείται για τη μέτρηση του αριθμού των στοιχείων "υποστοιχείου" που βρίσκονται στο αρχείο XML από το οποίο γίνεται η ανάγνωση των δεδομένων.

Ακολουθεί ο κύκλος της απευθείας ανάγνωσης δεδομένων από το αρχείο. Η μέθοδος Read() διαβάζει το επόμενο στοιχείο του εγγράφου XML και αφού το διαβάσουμε, ελέγχουμε τι ακριβώς διαβάσαμε. Εάν είναι πράγματι ένα στοιχείο "υποστοιχείο", τότε προσθέτουμε πληροφορίες σχετικά με το στοιχείο που διαβάζεται στο listBox1, αυξάνουμε μια μεταβλητή που περιέχει τον αριθμό των στοιχείων που διαβάζονται και, στη συνέχεια, διαβάζουμε τα χαρακτηριστικά του στοιχείου. Αφού διαβάσουμε τα χαρακτηριστικά, οργανώνουμε έναν ξεχωριστό βρόχο για να διαβάσουμε τα υποστοιχεία (σημειώστε ότι δεν χρειαζόμαστε ξεχωριστό XmlTextReader για αυτό) και τα χαρακτηριστικά αυτών των υποστοιχείων. Όπως και πριν, εισάγουμε όλες τις πληροφορίες που διαβάζονται στο listBox1 για να ελέγξουμε την ορθότητα του ΑΝΑΓΝΩΣΗ.

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


Στα παρασκήνια

Γενικά, το παράδειγμα που μόλις συζητήσαμε είναι πολύ απλό για πραγματικά έργα. Σήμερα, κατά την ανάγνωση εγγράφων XML, συνήθως επικυρώνονται χρησιμοποιώντας DTD, XML Schema ή Relax NG. Η επικύρωση είναι ένας έλεγχος συμμόρφωσης της σήμανσης εγγράφου XML με κάποιο πρότυπο που περιγράφεται σε ένα εξωτερικό αρχείο. Απαιτείται επικύρωση, ώστε η επαλήθευση εγγράφου να μην ενσωματώνεται στον αλγόριθμο του προγράμματος, αλλά να μπορεί να αλλάξει αυθαίρετα όταν αλλάζει η μορφή δεδομένων χωρίς να ενημερώνεται ο κώδικας προγράμματος που διαβάζει ή γράφει δεδομένα. Δυστυχώς, τώρα δεν θα έχουμε χρόνο να διευθετήσουμε την επικύρωση, επειδή, όπως καταλαβαίνετε οι ίδιοι, ο όγκος ενός άρθρου εφημερίδας έχει ορισμένους περιορισμούς.

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

Λοιπόν, νομίζω ότι αυτό το άρθρο θα έχει συνέχεια - αλλά, φυσικά, μόνο εάν εσείς οι ίδιοι (δηλαδή οι αναγνώστες του Computer News) το ρωτήσετε στο φόρουμ ή σε μια επιστολή στη διεύθυνση email μου. Προς το παρόν, αυτό είναι πιθανώς το μόνο για τη χρήση XML σε εφαρμογές .NET. Ελπίζω αυτές οι πληροφορίες να είναι χρήσιμες για εσάς.