Πίνακας περιεχομένων:
- Σκεφτείτε τον κώδικα στις Καταχωρήσεις 1 και 2. Η λίστα 1, σαρώνει πέντε κόμβους σε ένα δέντρο εγγράφων. Αυτοί οι πέντε κόμβοι πρέπει να διευθετηθούν με κάποιο τρόπο, αλλιώς το πρόγραμμα καταρρέει. (Η λίστα θέλει ένα σχόλιο και έναν κόμβο ρίζας, με τουλάχιστον δύο παιδιά απευθείας κάτω από τον κόμβο ρίζας.)
- Μπορείτε να σταματήσετε σε ένα βενζινάδικο και να αγοράσετε ένα χάρτη. Εάν το κάνετε, τότε δεν μπορείτε ποτέ να φτάσετε στο Faneuil Hall. Μετά από όλα, θα πρέπει να βρείτε το σημείο όπου βρίσκεστε στο χάρτη, να αναζητήσετε εναλλακτικές διαδρομές, να επιλέξετε μια διαδρομή και, στη συνέχεια (ο ουρανός να σας βοηθήσει) προσπαθήστε να ακολουθήσετε τη διαδρομή χωρίς να χάσετε ξανά.
- μεταγλωττιστής σχήματος
Βίντεο: Exploring JavaScript and the Web Audio API by Sam Green and Hugh Zabriskie 2024
Μπορείτε να δημιουργήσετε προσαρμοσμένο κώδικα με JAXB Java API για δέσμευση XML . Με το JAXB, λαμβάνετε ένα έγγραφο XML και δημιουργείτε ένα αρχείο κατηγορίας Java που είναι ιδανικό για την επεξεργασία του εγγράφου. Όταν οι ανάγκες σας αλλάξουν και η τάξη δεν κάνει πλέον αυτό που θέλετε να κάνει, απλά δημιουργείτε μια νέα υποκατηγορία. Όταν γράφετε κώδικα SAX ή DOM, δημιουργείτε ένα πρόγραμμα επεξεργασίας XML. Το πρόγραμμά σας διαβάζει ένα έγγραφο και χρησιμοποιεί το έγγραφο για να κάνει χρήσιμη εργασία - ξεκινώντας με κάτι ακίνδυνο όπως το δημόσιο κενό startElement ή κόμβος. getNodeName (). Είτε έτσι είτε αλλιώς, το πρόγραμμά σας δεν κάνει υποθέσεις σχετικά με το τι υπάρχει μέσα στο έγγραφο. Το έγγραφο έχει ένα στοιχείο ρίζας, μερικά στοιχεία παιδιού, και αυτό είναι όλο. Οποιεσδήποτε ειδικές υποθέσεις που κάνετε σχετικά με αυτό το έγγραφο ουσιαστικά περιορίζουν τη χρησιμότητα του κώδικα.
Σκεφτείτε τον κώδικα στις Καταχωρήσεις 1 και 2. Η λίστα 1, σαρώνει πέντε κόμβους σε ένα δέντρο εγγράφων. Αυτοί οι πέντε κόμβοι πρέπει να διευθετηθούν με κάποιο τρόπο, αλλιώς το πρόγραμμα καταρρέει. (Η λίστα θέλει ένα σχόλιο και έναν κόμβο ρίζας, με τουλάχιστον δύο παιδιά απευθείας κάτω από τον κόμβο ρίζας.)
Λίστα 1: Εμφάνιση μερικών κόμβων
org εισαγωγής. w3c. dom. Κόμβος;
εισαγωγή org. w3c. dom. NamedNodeMap;
κατηγορία MyTreeTraverser
{
MyTreeTraverser (κόμβος κόμβου)
{
Σύστημα. έξω. println (κόμβος getNodeName ());
κόμβος = κόμβος. getFirstChild ();
Σύστημα. έξω. println (κόμβος getNodeName ());
κόμβος = κόμβος. getNextSibling ();
Σύστημα. έξω. println (κόμβος getNodeName ());
κόμβος = κόμβος. getFirstChild ();
Σύστημα. έξω. println (κόμβος getNodeName ());
κόμβος = κόμβος. getNextSibling ();
Σύστημα. έξω. println (κόμβος getNodeName ());
}
}
Εισαγωγή org. w3c. dom. Κόμβος;
εισαγωγή org. w3c. dom. NamedNodeMap;
κατηγορία MyTreeTraverser
{
κόμβος κόμβου;
MyTreeTraverser (κόμβος κόμβου)
{
αυτό. κόμβος = κόμβος;
displayName ();
displayValue ();
αν (κόμβος getNodeType () == Κόμβος ELEMENT_NODE)
displayAttributes ();
Σύστημα. έξω. println ();
Εμφάνιση παιδιών ();
}
κενό displayName ()
{
Σύστημα. έξω. Όνομα εκτύπωσης: ");
Σύστημα. έξω. println (κόμβος getNodeName ());
}
άκυρη εμφάνισηValue ()
{
String nodeValue = κόμβος. getNodeValue ();
εάν (nodeValue! = Null)
nodeValue = nodeValue. τακτοποίηση();
Σύστημα. έξω. εκτύπωση ("Αξία:");
Σύστημα. έξω. println (nodeValue);
}
άκυρη εμφάνισηAttributes ()
{
NamedNodeMap attribs = κόμβος. getAttributes ();
για το (int i = 0; i { Σύστημα. έξω. println (); Σύστημα. έξω. εκτύπωση ("Χαρακτηριστικό:"); Σύστημα. έξω. εκτύπωση (αποδίδεται στοιχείο (i). getNodeName ()); Σύστημα. έξω. εκτύπωση ("="); Σύστημα. έξω. println (αποδίδει στοιχείο (i). getNodeValue ()); } } άκυρη εμφάνισηΠαιχνίδια () { κόμβος παιδί = κόμβος. getFirstChild (); ενώ (παιδί! = Null) { νέο MyTreeTraverser (παιδί); παιδί = παιδί. getNextSibling (); } } }
Ο κώδικας στην Λίστα 2 είναι πολύ πιο γενικός. Αυτός ο κώδικας ελέγχει τη δομή του εγγράφου καθώς εκτελείται. Όταν ο κώδικας βρει έναν παιδικό κόμβο, σαρώει το παιδί και ψάχνει τα εγγόνια. Εάν δεν υπάρχουν εγγόνια, ο κώδικας αναζητά αδελφούς και αδελφές. Ο κώδικας μπορεί να χειριστεί οποιαδήποτε δέντρο εγγράφων - είτε έχει έναν κόμβο είτε χίλιους κόμβους.
Έτσι, η Λίστα 2 είναι πιο ευέλικτη από την Καταχώρηση 1. Ωστόσο, αυτή η ευελιξία έρχεται με μειονεκτήματα - συμπεριλαμβανομένης της δυνατότητας πολύ υψηλών γενικών εξόδων. Ο κώδικας στην Λίστα 2 πρέπει να αναλύσει ολόκληρο το έγγραφο XML και στη συνέχεια να παρουσιάσει μια παράσταση του δέντρου του εγγράφου στη μνήμη του υπολογιστή. Εάν το έγγραφο είναι πολύ μεγάλο, τότε η αναπαράσταση είναι μεγάλη: Η μνήμη διογκώνεται με όλα αυτά τα προσωρινά δεδομένα και ο κώδικας στην Λίστα 2 επιβραδύνεται σε μια ανίχνευση.Τα οφέλη της προσαρμογής
Φανταστείτε ότι προσπαθείτε να οδηγήσετε στο Faneuil Hall στη Βοστόνη της Μασαχουσέτης. Δεν έχει σημασία από πού ξεκινάτε. το ταξίδι θα είναι πάντα συγκεχυμένο και δύσκολο. Τέλος πάντων, πρέπει να σχεδιάσετε τη διαδρομή σας. Μπορείτε να χαθείτε στο κοντινό Revere ή Cambridge ή στο κέντρο της Βοστώνης. Ανάλογα με τους πόρους σας, έχετε δύο επιλογές:
Μπορείτε να σταματήσετε σε ένα βενζινάδικο και να αγοράσετε ένα χάρτη. Εάν το κάνετε, τότε δεν μπορείτε ποτέ να φτάσετε στο Faneuil Hall. Μετά από όλα, θα πρέπει να βρείτε το σημείο όπου βρίσκεστε στο χάρτη, να αναζητήσετε εναλλακτικές διαδρομές, να επιλέξετε μια διαδρομή και, στη συνέχεια (ο ουρανός να σας βοηθήσει) προσπαθήστε να ακολουθήσετε τη διαδρομή χωρίς να χάσετε ξανά.
Μπορείτε να ενημερώσετε το ακριβό σύστημα ομιλίας GPS που θέλετε να φτάσετε στο Faneuil Hall. Το σύστημα θα σχεδιάσει μια προσαρμοσμένη διαδρομή και θα σας καθοδηγήσει, γυρίστε από τη σειρά του, από ό, τι άθλια τόπο βρίσκεστε στην βέλτιστη διαδρομή που οδηγεί από εκεί στην αίθουσα Faneuil. Η διαδρομή είναι τόσο προσαρμοσμένη ώστε η φωνή GPS λέει (για παράδειγμα), "Δεν υπάρχει κανένα σημάδι σε αυτή τη διασταύρωση, αλλά στρίψτε αριστερά ούτως ή άλλως. »Αργότερα, η φωνή λέει« Υπάρχουν δύο σημεία σε αυτή τη διασταύρωση, και τα σημάδια αντιβαίνουν ο ένας στον άλλο. Αλλά στρίψτε δεξιά ούτως ή άλλως. "
- Η χρήση του χάρτη χαρτών απαιτεί περισσότερη δουλειά (περισσότερο χρόνο, προσπάθεια, επιδεξιότητα και υπομονή) από τη χρήση του ομιλούμενου GPS. Γιατί; Επειδή ο χάρτης χαρτιού δεν είναι προσαρμοσμένος στις συγκεκριμένες ανάγκες σας. στην πραγματικότητα, λέει, "Εδώ είναι ολόκληρη η μητροπολιτική περιοχή της Βοστόνης. Η αίθουσα Faneuil είναι κάπου εκεί.
- Μπορείτε
να καταλάβετε τι πρέπει να κάνετε στη συνέχεια. " Ένα προσαρμοσμένο σύστημα είναι (όπως ίσως αναμένεται) πιο εύκολο από αυτό που δεν είναι προσαρμοσμένο στην άμεση σας κατάσταση. Έτσι, ο κώδικας επεξεργασίας XML της Καταχώρισης 2 κάνει ένα τεράστιο δέντρο DOM που περιέχει πόρους στον χώρο μνήμης του υπολογιστή σας ("Εδώ είναι το δέντρο - εσείς
καταλάβετε τι πρέπει να κάνετε στη συνέχεια …") επειδή ο κώδικας δεν είναι " t προσαρμοσμένο.Ο κώδικας λειτουργεί για κάθε παλιό έγγραφο - όχι μόνο αυτό που έχετε στη διάθεσή σας - και πάντα βάζει τα χρήματα για να το κάνει. Η ουσία του JAXB Η ιδέα πίσω από το JAXB είναι να δημιουργήσει προσαρμοσμένη τάξη για να ικανοποιήσει τις τρέχουσες ανάγκες σας. Παίρνετε την περιγραφή ενός εγγράφου XML, εκτελέστε το μέσω ενός ειδικού προγράμματος που ονομάζεται
μεταγλωττιστής σχήματος
και αποκτήστε μια ολοκαίνουργια κλάση που ονομάζεται δημιουργηθείσα κλάση . Αυτή η κατηγορία που δημιουργείται είναι εξορθολογισμένη ώστε να λειτουργεί με συγκεκριμένα έγγραφα XML.
. Με όλες αυτές τις δεσμεύσεις, μια παρουσία της κλάσης αντιπροσωπεύει ένα ενιαίο έγγραφο XML.
- Η μέθοδος marshal γράφει ένα αρχείο XML. Η μέθοδος παίρνει τιμές από το αντικείμενο Java και χρησιμοποιεί αυτές τις τιμές για να δημιουργήσει το έγγραφο XML.
- Εικόνα 2:
Τιμές ανάγνωσης και γραφής.