Διαφήμιση

Θα θέλατε να μάθετε πώς να διαβάζετε και να γράφετε ένα αρχείο XML από java;

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

Java Standard Edition (SE) 10 βασικές έννοιες Java που πρέπει να μάθετε όταν ξεκινήσετεΕίτε γράφετε ένα GUI, είτε αναπτύσσετε λογισμικό από την πλευρά του διακομιστή ή μια εφαρμογή για κινητά χρησιμοποιώντας Android, η εκμάθηση Java θα σας εξυπηρετήσει καλά. Ακολουθούν ορισμένες βασικές έννοιες Java που θα σας βοηθήσουν να ξεκινήσετε. Διαβάστε περισσότερα

instagram viewer
περιλαμβάνει το Java API για επεξεργασία XML (JAXP), ο οποίος είναι ένας γενικός όρος που καλύπτει τις περισσότερες πτυχές της επεξεργασίας XML. Αυτά περιλαμβάνουν:

  • DOM: Το μοντέλο αντικειμένου εγγράφου περιλαμβάνει κλάσεις για εργασία με τεχνουργήματα XML, όπως στοιχείο, κόμβο, χαρακτηριστικά κ.λπ. Το DOM API φορτώνει ολόκληρο το έγγραφο XML στη μνήμη για επεξεργασία, επομένως δεν είναι πολύ κατάλληλο για εργασία με μεγάλα αρχεία XML.
  • SAX: Το Simple API για XML είναι ένας αλγόριθμος που βασίζεται σε συμβάντα για την ανάγνωση XML. Εδώ η XML επεξεργάζεται με την ενεργοποίηση συμβάντων που βρέθηκαν κατά την ανάγνωση της XML. Οι απαιτήσεις μνήμης για τη χρήση αυτής της μεθόδου είναι χαμηλές, αλλά η εργασία με το API είναι πιο περίπλοκη από την εργασία με το DOM.
  • StaX: Το Streaming API για XML είναι μια πρόσφατη προσθήκη στα API XML και παρέχει φιλτράρισμα ροής υψηλής απόδοσης, επεξεργασία και τροποποίηση της XML. Ενώ αποφεύγει τη φόρτωση ολόκληρου του εγγράφου XML στη μνήμη, παρέχει μάλλον μια αρχιτεκτονική τύπου έλξης παρά μια αρχιτεκτονική που βασίζεται σε συμβάντα, επομένως η εφαρμογή κωδικοποιείται και κατανοείται ευκολότερα από τη χρήση του SAX API.

Σε αυτό το άρθρο, χρησιμοποιούμε το DOM API για να δείξετε πώς να διαβάζετε και να γράφετε αρχεία XML από java. Θα καλύψουμε τα άλλα δύο API σε μελλοντικά άρθρα.

Ένα δείγμα αρχείου XML

Για τους σκοπούς αυτού του άρθρου, παρουσιάζουμε τις έννοιες χρησιμοποιώντας το ακόλουθο δείγμα XML, το οποίο μπορείτε να βρείτε εδώ:

 1.0?>Gambardella, MatthewΟδηγός προγραμματιστή XML
Υπολογιστή44.952000-10-01Μια εις βάθος ματιά στη δημιουργία εφαρμογών με XML.Ραλς, Κιμ... 

Ανάγνωση ενός αρχείου XML

Ας δούμε τα βασικά βήματα που απαιτούνται για την ανάγνωση ενός αρχείου XML χρησιμοποιώντας το DOM API.

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

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware (false); factory.setValidating (false); DocumentBuilder builder = factory.newDocumentBuilder(); 

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

Αρχείο αρχείου =...; // Αρχείο XML για ανάγνωση. Document document = builder.parse (αρχείο); Κατάλογος στοιχείων = document.getDocumentElement(); 

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

Χρησιμοποιώντας το DOM API

Τώρα που έχουμε τη ρίζα XML Στοιχείο, μπορούμε να χρησιμοποιήσουμε το DOM API για να εξαγάγουμε ενδιαφέροντα ψήγματα πληροφοριών.

Πάρτε όλα τα Βιβλίο παιδιά του ριζικού στοιχείου και βρόχο πάνω τους. Σημειώστε ότι getChildNodes() επιστρέφει όλα παιδιά, συμπεριλαμβανομένων κειμένου, σχολίων κ.λπ. Για τον σκοπό μας, χρειαζόμαστε μόνο τα παιδικά στοιχεία, επομένως παρακάμπτουμε τα άλλα.

Βιβλία NodeList = catalog.getChildNodes(); for (int i = 0, ii = 0, n = books.getLength(); i < n; i++) { Node child = books.item (i); if ( child.getNodeType() != Κόμβος. ELEMENT_NODE ) συνέχεια. Element book = (Στοιχείο) παιδί; // εργαστείτε με το βιβλίο Στοιχείο εδώ. }

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

στατικό ιδιωτικό Node findFirstNamedElement (γονικός κόμβος, όνομα ετικέτας συμβολοσειράς) { NodeList Children = parent.getChildNodes(); for (int i = 0, in = children.getLength(); i < σε; i++) { Κόμβος παιδί = παιδιά.στοιχείο (i); if ( child.getNodeType() != Κόμβος. ELEMENT_NODE ) συνέχεια. if ( child.getNodeName().equals (tagName) ) επιστρέψει παιδί; } return null; }

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

στατική ιδιωτική συμβολοσειρά getCharacterData (γονικός κόμβος) { StringBuilder text = new StringBuilder(); if ( parent == null ) επιστρέψει text.toString(); NodeList παιδιά = parent.getChildNodes(); for (int k = 0, kn = children.getLength(); k < kn; k++) { Κόμβος παιδί = child.item (k); if ( child.getNodeType() != Κόμβος. TEXT_NODE ) διάλειμμα; text.append (child.getNodeValue()); } return text.toString(); }

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

Βιβλία NodeList = catalog.getChildNodes(); for (int i = 0, ii = 0, n = books.getLength(); i < n; i++) { Node child = books.item (i); if ( child.getNodeType() != Κόμβος. ELEMENT_NODE ) συνέχεια. Element book = (Στοιχείο) παιδί; ii++; String id = book.getAttribute("id"); Συγγραφέας συμβολοσειράς = getCharacterData (findFirstNamedElement (παιδί,"συγγραφέας")); Τίτλος συμβολοσειράς = getCharacterData (findFirstNamedElement (child,"title")); Είδος συμβολοσειράς = getCharacterData (findFirstNamedElement (child,"genre")); Τιμή συμβολοσειράς = getCharacterData (findFirstNamedElement (child,"price")); String pubdate = getCharacterData (findFirstNamedElement (child,"pubdate")); String descr = getCharacterData (findFirstNamedElement (παιδί,"περιγραφή")); System.out.printf("%3d. αναγνωριστικό βιβλίου = %s\n" + " συγγραφέας: %s\n" + " τίτλος: %s\n" + " είδος: %s\n" + " τιμή: %s\n" + " δημοσίευση: %s \n" + " descr: %s\n", ii, id, συγγραφέας, τίτλος, είδος, τιμή, pubdate, descr); }

Σύνταξη εξόδου XML

Η Java παρέχει το XML Transform API για να μετατρέψετε δεδομένα XML. Χρησιμοποιούμε αυτό το API με το μετασχηματισμός ταυτότητας για την παραγωγή εξόδου.

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

id=bk113. συγγραφέας=Τζέιν Όστεν. τίτλος=Περηφάνια και προκατάληψη. είδος=Ρομαντικός. τιμή=6,99. Δημοσίευση_ημερομηνία=2010-04-01. description="Είναι μια αλήθεια παγκοσμίως αποδεκτή, ότι ένας ανύπαντρος που έχει μια καλή περιουσία πρέπει να έχει έλλειψη συζύγου." Έτσι ξεκινά το Pride and Prejudice, η πνευματώδης κωμωδία τρόπων της Τζέιν Όστεν -ένα από τα πιο δημοφιλή μυθιστορήματα όλων των εποχών- που παρουσιάζει υπέροχα πολιτισμένα φιλαρίσματα μεταξύ ο περήφανος κύριος Ντάρσυ και η προκατειλημμένη Ελίζαμπεθ Μπένετ καθώς παίζουν τη ζωηρή ερωτοτροπία τους σε μια σειρά από σαλόνια του δέκατου όγδοου αιώνα ίντριγκες. 

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

Αρχείο αρχείου =...; // Αρχείο XML για ανάγνωση. Document document = builder.parse (αρχείο); Κατάλογος στοιχείων = document.getDocumentElement(); 

Φορτώνουμε τα δεδομένα από το αρχείο ιδιοτήτων χρησιμοποιώντας το Ιδιότητες τάξη παρέχεται με java. Ο κώδικας είναι αρκετά απλός και φαίνεται παρακάτω.

String propsFile =...; Properties props = new Properties(); try (FileReader in = new FileReader (propsFile)) { props.load (in); }

Μόλις φορτωθούν οι ιδιότητες, ανακτούμε τις τιμές που θέλουμε να προσθέσουμε από το αρχείο ιδιοτήτων.

Αναγνωριστικό συμβολοσειράς = props.getProperty("id"); Συγγραφέας συμβολοσειράς = props.getProperty("συγγραφέας"); Τίτλος συμβολοσειράς = props.getProperty("τίτλος"); String genre = props.getProperty("genre"); Τιμή συμβολοσειράς = props.getProperty("τιμή"); String publish_date = props.getProperty("ημερομηνία_δημοσίευσης"); String descr = props.getProperty("περιγραφή"); 

Ας δημιουργήσουμε τώρα ένα κενό Βιβλίο στοιχείο.

Element book = document.createElement("βιβλίο"); book.setAttribute("id", id); 

Προσθήκη των θυγατρικών στοιχείων στο Βιβλίο είναι ασήμαντο. Για ευκολία, συλλέγουμε τα απαιτούμενα ονόματα στοιχείων στο α Λίστα και προσθέστε τις τιμές σε ένα βρόχο.

Λίσταelnames =Arrays.asList("συγγραφέας", "τίτλος", "είδος", "τιμή", "ημερομηνία_δημοσίευσης", "περιγραφή"); for (Στοιχείο elname: elnames) { Element el = document.createElement (elname); Κείμενο κειμένου = document.createTextNode (props.getProperty (elname)); el.appendChild (κείμενο); book.appendChild (el); } catalog.appendChild (βιβλίο);

Και έτσι γίνεται. ο κατάλογος στοιχείο τώρα έχει το νέο Βιβλίο στοιχείο προστέθηκε. Το μόνο που μένει τώρα είναι να γράψετε το ενημερωμένο XML.

Για να γράψουμε το XML, χρειαζόμαστε ένα παράδειγμα του Μετασχηματιστής που δημιουργείται όπως φαίνεται παρακάτω. Σημειώστε ότι ζητάμε εσοχή της εξόδου XML χρησιμοποιώντας το setOutputProperty() μέθοδος.

TransformerFactory tfact = TransformerFactory.newInstance(); Transformer tform = tfact.newTransformer(); tform.setOutputProperty (OutputKeys. ΕΙΣΧΕΙ, "ναι"); tform.setOutputProperty("{ http://xml.apache.org/xslt}indent-amount", "3"); 

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

tform.transform (νέο DOMSsource (έγγραφο), νέο StreamResult (System.out)); 

Για να γράψετε την έξοδο απευθείας σε ένα αρχείο, χρησιμοποιήστε τα παρακάτω.

tform.transform (νέο DOMSsource (έγγραφο), νέο StreamResult (νέο Αρχείο("output.xml"))); 

Και αυτό ολοκληρώνει αυτό το άρθρο σχετικά με την ανάγνωση και τη σύνταξη αρχείων XML χρησιμοποιώντας το DOM API.

Έχετε χρησιμοποιήσει το DOM API στις εφαρμογές σας; Πώς απέδωσε; Παρακαλούμε ενημερώστε μας στα σχόλια παρακάτω.