Zuhause Persönliche Finanzen Benutzerdefinierten Code mit Java API für XML-Bindung (JAXB) erstellen - dummies

Benutzerdefinierten Code mit Java API für XML-Bindung (JAXB) erstellen - dummies

Inhaltsverzeichnis:

Video: Azure Friday | Azure App Service with Hybrid Connections to On-premises Resources 2024

Video: Azure Friday | Azure App Service with Hybrid Connections to On-premises Resources 2024
Anonim

Sie können mit JAXB einen benutzerdefinierten Code erstellen - das Java-API für die XML-Bindung . Mit JAXB nehmen Sie ein XML-Dokument und erstellen eine Java-Klassendatei, die für die Verarbeitung des Dokuments geeignet ist. Wenn sich Ihre Bedürfnisse ändern und die Klasse nicht mehr tut, was Sie wollen, dann erzeugen Sie einfach eine neue Unterklasse.

Wenn Sie SAX- oder DOM-Code schreiben, erstellen Sie ein XML-Verarbeitungsprogramm. Ihr Programm liest ein Dokument und verwendet das Dokument, um nützliche Arbeit zu verrichten - beginnend mit etwas harmlosem wie public void startElement oder node. getNodeName (). In jedem Fall macht Ihr Programm keine Annahmen darüber, was sich im Dokument befindet. Das Dokument hat ein Wurzelelement, einige Kindelemente, und das ist alles. Alle besonderen Annahmen, die Sie zu diesem Dokument machen, schränken die Nützlichkeit des Codes ein.

Vielseitiger Code im Vergleich zu benutzerdefiniertem Code

Betrachten Sie den Code in den Listen 1 und 2. Bei Listing 1 werden fünf Knoten in einem Dokumentbaum gescannt. Diese fünf Knoten müssen auf eine bestimmte Weise angeordnet werden, sonst stürzt das Programm ab. (Die Liste möchte einen Kommentar und einen Stammknoten mit mindestens zwei untergeordneten Elementen direkt unter dem Stammknoten.)

Listing 1: Anzeigen einiger Knoten

import org. w3c. dom. Knoten;

import org. w3c. dom. BenannteNodeMap;

Klasse MyTreeTraverser

{

MyTreeTraverser (Knotenknoten)

{

System. aus. println (Knoten. getNodeName ());

Knoten = Knoten. getFirstChild ();

System. aus. println (Knoten. getNodeName ());

Knoten = Knoten. getNextSibling ();

System. aus. println (Knoten. getNodeName ());

Knoten = Knoten. getFirstChild ();

System. aus. println (Knoten. getNodeName ());

Knoten = Knoten. getNextSibling ();

System. aus. println (Knoten. getNodeName ());

}

}

Listing 2: Durchlaufen des DOM-Baums

import org. w3c. dom. Knoten;

import org. w3c. dom. BenannteNodeMap;

Klasse MyTreeTraverser

{

Knotenknoten;

MyTreeTraverser (Knotenknoten)

{

dies. Knoten = Knoten;

displayName ();

displayValue ();

if (node. GetNodeType () == Knoten. ELEMENT_NODE) ​​

displayAttributes ();

System. aus. println ();

displayChildren ();

}

void displayName ()

{

System. aus. drucken ("Name:");

System. aus. println (Knoten. getNodeName ());

}

void displayValue ()

{

String nodeValue = Knoten. getNodeValue ();

if (nodeValue! = Null)

nodeValue = nodeValue. trimmen();

System. aus. drucken ("Wert:");

System. aus. println (nodeValue);

}

void displayAttributes ()

{

NamedNodeMap attribs = Knoten. getAttributes ();

für (int i = 0; i

{

System. aus. println ();

System. aus. Drucken ("Attribut:");

System. aus. print (attribs. item (i). getNodeName ());

System. aus. Drucken ("=");

System. aus. println (attribs. item (i). getNodeValue ());

}

}

void displayChildren ()

{

Knotenkind = Knoten. getFirstChild ();

while (child! = Null)

{

neuer MyTreeTraverser (untergeordnet);

Kind = Kind. getNextSibling ();

}

}

}

Der Code in Listing 2 ist viel allgemeiner. Dieser Code überprüft die Dokumentstruktur während der Ausführung. Wenn der Code einen untergeordneten Knoten findet, durchsucht er das untergeordnete Element und sucht nach Enkelkindern. Wenn es keine Enkel gibt, sucht der Code nach Geschwistern. Der Code kann jeden Dokumentbaum verarbeiten - unabhängig davon, ob er einen Knoten oder tausend Knoten hat.

Somit ist Listing 2 vielseitiger als Listing 1. Diese Vielseitigkeit bringt jedoch Nachteile mit sich - einschließlich der Möglichkeit eines sehr hohen Overheads. Der Code in Listing 2 muss das gesamte XML-Dokument analysieren - und dann eine Repräsentation des Baums des Dokuments in den Speicher des Computers einfügen. Wenn das Dokument sehr groß ist, ist die Darstellung groß: Der Speicher wird mit all diesen temporären Daten aufgebläht, und der Code in Listing 2 verlangsamt sich zu einem Crawl.

Die Vorteile der Anpassung

Stellen Sie sich vor, Sie versuchen, nach Faneuil Hall in Boston, Massachusetts, zu fahren. Es spielt keine Rolle, wo Sie anfangen; Die Reise wird immer verwirrend und schwierig sein. Wie auch immer, Sie müssen Ihre Route planen. Sie können sich im nahe gelegenen Revere oder Cambridge oder in der Innenstadt von Boston verlaufen. Abhängig von Ihren Ressourcen haben Sie zwei Möglichkeiten:

  • Sie können an einer Tankstelle anhalten und eine Karte kaufen. Wenn du das tust, wirst du vielleicht nie nach Faneuil Hall kommen. Schließlich müssen Sie herausfinden, wo Sie sich auf der Karte befinden, nach alternativen Routen suchen, eine Route wählen und dann versuchen, der Route zu folgen, ohne sich wieder zu verirren.
  • Sie können Ihrem teuren, sprechenden GPS-System mitteilen, dass Sie nach Faneuil Hall möchten. Das System wird eine angepasste Route erstellen und Sie von einem beliebigen Ort, an dem Sie sich gerade befinden, abwechselnd zu der optimalen Route führen, die von dort zur Faneuil Hall führt. Die Route ist so individuell, dass die GPS-Stimme (zum Beispiel) sagt: "Es gibt kein Schild an dieser Kreuzung, aber biegen Sie trotzdem links ab. "Später sagt die Stimme" Es gibt zwei Zeichen an dieser Kreuzung, und die Zeichen widersprechen einander. Aber biegen Sie trotzdem nach rechts ab. "

Die Verwendung der Papierkarte erfordert mehr Arbeit (mehr Zeit, Mühe, Geschicklichkeit und Geduld) als die Verwendung des sprechenden GPS. Warum? Weil die Papierkarte nicht an Ihre spezifischen Bedürfnisse angepasst ist. In der Tat heißt es: "Hier ist der gesamte Bostoner Ballungsraum. Faneuil Hall ist irgendwo da drin. Sie finden heraus, was als nächstes zu tun ist. "

Ein benutzerdefiniertes System ist (wie Sie vielleicht erwarten würden) einfacher zu verwenden als eines, das nicht auf Ihre unmittelbare Situation zugeschnitten ist. Somit erzeugt der XML-Verarbeitungscode von Listing 2 einen riesigen, ressourcenaufwühlenden DOM-Baum im Speicher Ihres Computers ("Hier ist der Baum - Sie finden heraus, was als Nächstes zu tun ist …"), weil der Code nicht t angepasst.Der Code funktioniert für jedes alte Dokument - nicht nur für das, das Sie zur Hand haben - und verschlingt immer Ressourcen dafür.

Die Essenz von JAXB

Die Idee hinter JAXB ist es, eine maßgeschneiderte Klasse zu erstellen, die Ihren gegenwärtigen Bedürfnissen entspricht. Sie nehmen die Beschreibung eines XML-Dokuments, führen es durch ein spezielles Programm namens -Schema-Compiler aus und erhalten eine brandneue Klasse namens generierte Klasse . Diese generierte Klasse wurde optimiert, um mit bestimmten XML-Dokumenten zu arbeiten.

Beispiel: Wenn Ihre XML-Dokumente über Elemente mit dem Namen Total verfügen, kann die generierte Klasse setTotal- und getTotal-Methoden haben. Wenn das Element eines Dokuments ein fullName-Attribut hat, kann die generierte Klasse setFullName- und getFullName-Methoden haben. (Siehe Abbildung 1.)

Die Verbindung zwischen einem Teil eines XML-Dokuments und einem Teil einer Java-Klasse wird als -Bindung bezeichnet. Bei all diesen Bindungen repräsentiert eine Instanz der Klasse ein einzelnes XML-Dokument.

Abbildung 1: Ein Objekt repräsentiert ein Dokument.

Wie verbindet man ein Objekt mit einem XML-Dokument? Nun, die generierte Klasse hat Methoden namens unmarshal und marshal. (Siehe Abbildung 2.)

  • Die Unmarshal-Methode liest eine XML-Datei. Die Methode ruft Werte aus dem XML-Dokument ab und ordnet diese Werte Variablen im Java-Objekt zu.
  • Die Marshal-Methode schreibt eine XML-Datei. Die Methode ruft Werte aus dem Java-Objekt ab und verwendet diese Werte zum Erstellen des XML-Dokuments.

Mit diesen Methoden können Sie die Daten in einem XML-Dokument abrufen und ändern.

Abbildung 2: Lesen und Schreiben von Werten.

Benutzerdefinierten Code mit Java API für XML-Bindung (JAXB) erstellen - dummies

Die Wahl des Herausgebers

Bearbeiten in Photoshop Elements 10 Schnellfoto-Bearbeitungsmodus - Schnuller

Bearbeiten in Photoshop Elements 10 Schnellfoto-Bearbeitungsmodus - Schnuller

Schneller Foto-Bearbeitungsmodus ist eine abgespeckte Version des Modus "Full Photo Edit", der einfach grundlegende Fixingtools bereitstellt und mit einigen einzigartigen Funktionen aufwartet, z. B. eine Vorher-Nachher-Vorschau Ihres Bildes. Hier ist ein Schritt-für-Schritt-Workflow, den Sie im Schnellfoto-Bearbeitungsmodus verwenden können, um Ihre Fotos zu reparieren:

Zum Optimieren von Photoshop Elements-Bildern mit Fotoeffekten - Dummies

Zum Optimieren von Photoshop Elements-Bildern mit Fotoeffekten - Dummies

Fotoeffekte in Photoshop Elements 11 funktionieren wie Anwenden von Filtern; Das Dialogfeld "Filtergalerie" bietet Ihnen zahlreiche Optionen zum Anwenden eines Filters. Das geführte Bedienfeld bietet Ihnen Filtereffekte und führt Sie dann durch die Schritte zum Anpassen von Helligkeitswerte, Ändern von Farbton und Sättigung und Durchführen weiterer Anpassungen zum Vervollkommnen des Ergebnisses. Sie ...

Eingeben des Absatztyps in Photoshop Elements 11 - Dummies

Eingeben des Absatztyps in Photoshop Elements 11 - Dummies

Absatztyp in Photoshop Elements 11 ist ähnlich zu dem Text, den Sie in ein Textverarbeitungsprogramm eingeben, mit der Ausnahme, dass er in einem Textfeld oder einem Begrenzungsrahmen enthalten ist. Wenn Sie größere Textabschnitte haben, die Sie in ein Bild eingeben möchten, ist die Eingabe des Textes als Absatztyp die praktischste Option. Während ...

Die Wahl des Herausgebers

PHP-Anweisungen - Dummys

PHP-Anweisungen - Dummys

PHP ist eine Skriptsprache, die speziell für die Verwendung im Internet entwickelt wurde. Es enthält Funktionen, die Sie bei der Programmierung der Aufgaben unterstützen, die für die Entwicklung dynamischer Webanwendungen erforderlich sind. Diese Tabelle gibt einen kurzen Überblick über einige der Anweisungen, die Sie häufig verwenden werden: Anweisung Beschreibung array ("key" => "value", ...); Casts a ...

PHP-Schablonen-Systeme - Schablonen-Systeme

PHP-Schablonen-Systeme - Schablonen-Systeme

Können die Menge an Arbeit reduzieren, die Sie für die Erstellung einer Website in PHP benötigen. Wenn Sie eine Website erstellen, verwenden Sie häufig das gleiche Layout für die gesamte Website. Sie haben eine obere Portion, vielleicht mit einem Menü; ein Hauptinhaltsbereich; und ein unterer Teil, vielleicht mit Links oder ...

Make MySQL Datenbank Änderungen mit den ALTER Query - Dummies

Make MySQL Datenbank Änderungen mit den ALTER Query - Dummies

Die ALTER Query wird verwendet, um die Struktur von eine MySQL-Datenbank. In dieser Liste wird die Syntax für die Änderungen angezeigt, die Sie wahrscheinlich vornehmen möchten: ADD-Spaltenbezeichnung ALTER-Spaltenname SET-DEFAULT-Wert ALTER-Spaltenname DROP DEFAULT CHANGE-Spaltenname newcolname-Definition DROP-Spaltenname MODIFY-Spaltenname RENAME newtablename

Die Wahl des Herausgebers

Hochgeschwindigkeitsdatencaching mit NoSQL - Dummies

Hochgeschwindigkeitsdatencaching mit NoSQL - Dummies

Mit NoSQL haben Sie Hochgeschwindigkeits-Caching. Stellen Sie sich vor, Sie sind Bankangestellte und arbeiten mit drei anderen Kollegen zusammen. Jeder hat eine Reihe von Leuten, die bedient werden sollen. Einer der Kunden bleibt jedoch in der Schlange, um zu fragen, ob sein Scheck bereits eingelöst und der Betrag seinem Konto gutgeschrieben wurde. Wenn Sie ...

Wie man Einsichten aus Big Data kommuniziert - Dummies

Wie man Einsichten aus Big Data kommuniziert - Dummies

Big Data kann helfen, Einblicke zu gewinnen. Unternehmen gewinnen Wettbewerbsvorteile, wenn die richtigen Informationen zur richtigen Zeit an die richtigen Leute geliefert werden. Dies bedeutet, Erkenntnisse und Informationen aus Daten zu extrahieren und sie Entscheidungsträgern auf eine Weise zu vermitteln, die sie leicht verstehen. Schließlich sind Menschen weniger wahrscheinlich zu handeln, wenn sie ...

Zookeeper und HBase Reliability - dummies

Zookeeper und HBase Reliability - dummies

Zookeeper ist ein verteiltes Cluster von Servern, das gemeinsam zuverlässige Koordinations- und Synchronisationsdienste für Cluster-Anwendungen bereitstellt. .. Zugegeben, der Name "Zookeeper" mag auf den ersten Blick eine seltsame Wahl sein, aber wenn Sie verstehen, was es für einen HBase-Cluster tut, können Sie die Logik dahinter sehen. Beim Erstellen und Debuggen von verteilten Anwendungen ...