Πώς να διαβάσετε XML σε C#

Pos Na Diabasete Xml Se C



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

Ανάγνωση XML σε C#

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

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







< ?xml εκδοχή = '1.0' κωδικοποίηση = 'utf-8' ? >
< υπαλλήλους >
< υπάλληλος >
< ταυτότητα > 1 ταυτότητα >
< όνομα > Σαμ Μπος όνομα >
< τμήμα > Εμπορία τμήμα >
< Μισθός > 50000 Μισθός >
υπάλληλος >
< υπάλληλος >
< ταυτότητα > 2 ταυτότητα >
< όνομα > Τζέιν Ντόε όνομα >
< τμήμα > Χρηματοδότηση τμήμα >
< Μισθός > 60000 Μισθός >
υπάλληλος >
< υπάλληλος >
< ταυτότητα > 3 ταυτότητα >
< όνομα > Τζέιμς όνομα >
< τμήμα > Ανθρώπινο δυναμικό τμήμα >
< Μισθός > 70000 Μισθός >
υπάλληλος >
υπαλλήλους >

1: Χρήση XmlDocument

Για να διαβάσετε ένα αρχείο XML σε C#, μπορείτε να χρησιμοποιήσετε την κλάση XmlDocument ή την κλάση XDocument, τα οποία αποτελούν μέρος του χώρου ονομάτων System.Xml. Η κλάση XmlDocument παρέχει μια προσέγγιση DOM (Document Object Model) για την ανάγνωση XML, ενώ η κλάση XDocument παρέχει μια προσέγγιση LINQ (Language-Integrated Query). Ακολουθεί ένα παράδειγμα χρήσης της κλάσης XmlDocument για την ανάγνωση ενός αρχείου XML:



χρησιμοποιώντας το σύστημα.
χρησιμοποιώντας System.Xml;

Πρόγραμμα τάξης
{
στατικό κενό Κύριο ( σειρά [ ] args )
{
XmlDocument doc = νέο XmlDocument ( ) ;
doc.Load ( 'employees.xml' ) ;

Κόμβοι XmlNodeList = doc.DocumentElement.SelectNodes ( '/υπάλληλοι/υπάλληλοι' ) ;

για κάθε ( Κόμβος XmlNode σε κόμβους )
{
σειρά ταυτότητα = κόμβος.SelectSingleNode ( 'ταυτότητα' ) .InnerText;
όνομα συμβολοσειράς = κόμβος.SelectSingleNode ( 'όνομα' ) .InnerText;
τμήμα συμβολοσειρών = κόμβος.SelectSingleNode ( 'τμήμα' ) .InnerText;
συμβολοσειρά μισθός = κόμβος.SelectSingleNode ( 'Μισθός' ) .InnerText;
Κονσόλα.WriteLine ( 'Αναγνωριστικό: {0}, Όνομα: {1}, Τμήμα: {2}, Μισθός: {3}' , ταυτότητα , όνομα, τμήμα, μισθός ) ;
}
}
}

Αυτός ο κώδικας χρησιμοποιεί την κλάση XmlDocument για τη φόρτωση του αρχείου XML και τη μέθοδο SelectNodes για την ανάκτηση μιας λίστας κόμβων υπαλλήλων. Στη συνέχεια, για κάθε κόμβο υπαλλήλου, χρησιμοποιεί τη μέθοδο SelectSingleNode για να ανακτήσει τις τιμές των θυγατρικών κόμβων αναγνωριστικού, ονόματος, τμήματος και μισθού και τις εμφανίζει χρησιμοποιώντας το Console.WriteLine:







2: Χρήση XDocument

Εναλλακτικά, μπορείτε επίσης να χρησιμοποιήσετε την κλάση XDocument για να διαβάσετε ένα αρχείο XML χρησιμοποιώντας μια προσέγγιση LINQ και παρακάτω είναι ο κώδικας που δείχνει πώς να το κάνετε:

χρησιμοποιώντας το σύστημα.

Πρόγραμμα τάξης
{
στατικό κενό Κύριο ( σειρά [ ] args )
{
XDocument doc = XDocument.Load ( 'employees.xml' ) ;

για κάθε ( Στοιχείο XElement σε έγγρ.Απόγονοι ( 'υπάλληλος' ) )
{
ενθ ταυτότητα = int.Ανάλυση ( στοιχείο.Στοιχείο ( 'ταυτότητα' ) .Αξία ) ;
όνομα συμβολοσειράς = στοιχείο.Στοιχείο ( 'όνομα' ) .Αξία;
τμήμα χορδών = στοιχείο.Στοιχείο ( 'τμήμα' ) .Αξία;
int μισθός = int.Parse ( στοιχείο.Στοιχείο ( 'Μισθός' ) .Αξία ) ;
Κονσόλα.WriteLine ( $ 'Αναγνωριστικό: {id}, Όνομα: {name}, Τμήμα: {τμήμα}, Μισθός: {μισθός}' ) ;
}
}
}

Το αρχείο XML φορτώνεται σε ένα αντικείμενο XDocument χρησιμοποιώντας τη μέθοδο XDocument.Load. Στη συνέχεια, όλα τα στοιχεία «υπάλληλος» του αρχείου XML ανακτώνται χρησιμοποιώντας την τεχνική Descendants. Για κάθε στοιχείο, γίνεται πρόσβαση στα θυγατρικά του στοιχεία χρησιμοποιώντας τη μέθοδο Element και οι τιμές τους εξάγονται χρησιμοποιώντας την ιδιότητα Value. Τέλος, τα εξαγόμενα δεδομένα εκτυπώνονται στην κονσόλα.



Σημειώστε ότι το XDocument ανήκει στον χώρο ονομάτων System.Xml.Linq, επομένως πρέπει να συμπεριλάβετε την ακόλουθη δήλωση χρήσης στην κορυφή του αρχείου C#

3: Χρήση XmlReader

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

χρησιμοποιώντας το σύστημα.
χρησιμοποιώντας System.Xml;

Πρόγραμμα τάξης
{
στατικό κενό Κύριο ( σειρά [ ] args )
{
χρησιμοποιώντας ( XmlReader reader = XmlReader.Create ( 'employees.xml' ) )
{
ενώ ( αναγνώστης.Διαβάστε ( ) )
{
αν ( reader.NodeType == XmlNodeType.Element && αναγνώστης.Όνομα == 'υπάλληλος' )
{
Κονσόλα.WriteLine ( 'ID:' + reader.GetAttribute ( 'ταυτότητα' ) ) ;
αναγνώστης.ReadToDescendant ( 'όνομα' ) ;
Κονσόλα.WriteLine ( 'Ονομα: ' + reader.ReadElementContentAsString ( ) ) ;
αναγνώστης.ReadToNextSibling ( 'τμήμα' ) ;
Κονσόλα.WriteLine ( 'Τμήμα:' + reader.ReadElementContentAsString ( ) ) ;
αναγνώστης.ReadToNextSibling ( 'Μισθός' ) ;
Κονσόλα.WriteLine ( 'Μισθός: ' + reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

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

Μέσα στον βρόχο, πρώτα ελέγχουμε αν ο τρέχων κόμβος είναι στοιχείο υπαλλήλου χρησιμοποιώντας τις ιδιότητες NodeType και Name του XmlReader. Εάν ναι, χρησιμοποιούμε τη μέθοδο GetAttribute για να ανακτήσουμε την τιμή του χαρακτηριστικού id.

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

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

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

4: XML σε LINQ

Η ανάγνωση ενός αρχείου XML χρησιμοποιώντας LINQ σε XML σε C# είναι ένας ισχυρός τρόπος πρόσβασης και χειρισμού δεδομένων XML. Το LINQ to XML είναι ένα στοιχείο της τεχνολογίας LINQ που παρέχει ένα απλό και αποτελεσματικό API για εργασία με δεδομένα XML.

χρησιμοποιώντας το σύστημα.
χρησιμοποιώντας System.Linq;
χρησιμοποιώντας System.Xml.Linq;

Πρόγραμμα τάξης
{
στατικό κενό Κύριο ( σειρά [ ] args )
{
XDocument doc = XDocument.Load ( 'employees.xml' ) ;

var υπάλληλοι = από το e σε έγγρ.Απόγονοι ( 'υπάλληλος' )
επιλέγω νέος
{
Id = ε.Στοιχείο ( 'ταυτότητα' ) .Αξία,
Όνομα = ε.Στοιχείο ( 'όνομα' ) .Αξία,
Τμήμα = ε.Στοιχείο ( 'τμήμα' ) .Αξία,
Μισθός = ε.Στοιχείο ( 'Μισθός' ) .Αξία
} ;
για κάθε ( var υπάλληλος σε υπαλλήλους )
{
Κονσόλα.WriteLine ( $ 'Αναγνωριστικό: {employee.Id}, Όνομα: {employee.Name}, Τμήμα: {employee.Department}, Μισθός: {employee.Salary}' ) ;
}
}
}

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

5: Χρήση XPath

Η XPath είναι μια γλώσσα ερωτημάτων που χρησιμοποιείται για την πλοήγηση σε ένα έγγραφο XML για τον εντοπισμό συγκεκριμένων στοιχείων, χαρακτηριστικών και κόμβων. Είναι ένα αποτελεσματικό εργαλείο για την αναζήτηση και το φιλτράρισμα πληροφοριών σε ένα έγγραφο XML. Στην C#, μπορούμε να χρησιμοποιήσουμε τη γλώσσα XPath για να διαβάσουμε και να εξαγάγουμε δεδομένα από αρχεία XML.

χρησιμοποιώντας το σύστημα.
χρησιμοποιώντας System.Xml.XPath;
χρησιμοποιώντας System.Xml;

Πρόγραμμα τάξης
{
στατικό κενό Κύριο ( σειρά [ ] args )
{
XmlDocument doc = νέο XmlDocument ( ) ;
doc.Load ( 'employees.xml' ) ;

// Δημιουργήστε ένα XPathNavigator από το έγγραφο
XPathNavigator nav = doc.CreateNavigator ( ) ;

// Μεταγλώττιση της έκφρασης XPath
XPathExpression expr = πλοηγ.Μεταγλωττίζω ( '/υπάλληλοι/υπάλληλος/όνομα' ) ;

// Αξιολογήστε την έκφραση και επαναλάβετε τα αποτελέσματα
XPathNodeIterator iterator = nav.Select ( expr ) ;
ενώ ( επαναλήπτης.MoveNext ( ) )
{
Κονσόλα.WriteLine ( επαναλήπτης.Τρέχουσα.Τιμή ) ;
}
}
}

Αυτός ο κώδικας φορτώνει το αρχείο 'employees.xml' χρησιμοποιώντας ένα XmlDocument, δημιουργεί ένα XPathNavigator από το έγγραφο και μεταγλωττίζει μια έκφραση XPath για να επιλέξει όλα τα στοιχεία κάτω από τα στοιχεία . Στη συνέχεια, αξιολογεί την έκφραση και επαναλαμβάνει τα αποτελέσματα, εκτυπώνοντας την τιμή κάθε στοιχείου <όνομα>.

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

συμπέρασμα

Η χρήση της κλάσης XmlDocument παρέχει πλήρεις δυνατότητες χειρισμού DOM, αλλά μπορεί να είναι πιο αργή και πιο εντατική στη μνήμη από τις άλλες μεθόδους. Η κλάση XmlReader είναι μια καλή επιλογή για την ανάγνωση μεγάλων αρχείων XML, καθώς παρέχει μια γρήγορη, μόνο προς τα εμπρός και χωρίς προσωρινή αποθήκευση προσέγγιση βασισμένη σε ροή. Η κλάση XDocument παρέχει μια απλούστερη και πιο συνοπτική σύνταξη, αλλά μπορεί να μην είναι τόσο αποτελεσματική όσο το XmlReader. Επιπλέον, οι μέθοδοι LINQ to XML και XPath παρέχουν ισχυρές δυνατότητες αναζήτησης για την εξαγωγή συγκεκριμένων δεδομένων από ένα αρχείο XML.