Huis Persoonlijke financiën Aangepaste code bouwen met Java API voor XML Binding (JAXB) - dummies

Aangepaste code bouwen met Java API voor XML Binding (JAXB) - dummies

Inhoudsopgave:

Video: Fun with Music and Programming by Connor Harris and Stephen Krewson 2024

Video: Fun with Music and Programming by Connor Harris and Stephen Krewson 2024
Anonim

Je kunt aangepaste code bouwen met JAXB - de Java API voor XML Binding . Met JAXB neemt u een XML-document en maakt u een Java-klassenbestand dat perfect is voor het verwerken van het document. Wanneer uw behoeften veranderen en de klas niet meer doet wat u wilt, maakt u een nieuwe subklasse.

Wanneer u SAX- of DOM-code schrijft, maakt u een XML-verwerkingsprogramma. Je programma leest een document en gebruikt het document om nuttig werk te doen - te beginnen met iets ongevaarlijks, zoals een publiekelijk nietig startElement of knooppunt. getNodeName (). Hoe dan ook, je programma maakt geen aannames over wat er in het document zit. Het document heeft een rootelement, enkele onderliggende elementen, en dat is alles. Eventuele speciale aannames die u over dit document maakt, versmallen feitelijk de bruikbaarheid van de code.

Veelzijdige code versus aangepaste code

Overweeg de code in Listings 1 en 2. Listing 1, scant vijf knooppunten in een documentstructuur. Die vijf knooppunten moeten op een bepaalde manier worden gerangschikt, anders schiet het programma vast. (De lijst wil een opmerking en een hoofdknooppunt, met minstens twee kinderen direct onder het basisknooppunt.)

Listing 1: enkele knooppunten weergeven

org importeren. w3c. dom. Knooppunt;

import org. w3c. dom. NamedNodeMap;

class MyTreeTraverser

{

MyTreeTraverser (knooppunt knooppunt)

{

systeem. uit. println (knooppunt. getNodeName ());

knooppunt = knooppunt. getFirstChild ();

Systeem. uit. println (knooppunt. getNodeName ());

knooppunt = knooppunt. getNextSibling ();

Systeem. uit. println (knooppunt. getNodeName ());

knooppunt = knooppunt. getFirstChild ();

Systeem. uit. println (knooppunt. getNodeName ());

knooppunt = knooppunt. getNextSibling ();

Systeem. uit. println (knooppunt. getNodeName ());

}

}

Listing 2: Traceer de DOM-tree

importeer org. w3c. dom. Knooppunt;

import org. w3c. dom. NamedNodeMap;

klasse MyTreeTraverser

{

Knooppunt knooppunt;

MyTreeTraverser (knooppunt knooppunt)

{

dit. knooppunt = knooppunt;

Selecteer ();

displayValue ();

if (knooppunt. GetNodeType () == Node. ELEMENT_NODE) ​​

displayAttributes ();

Systeem. uit. println ();

displayChildren ();

}

void displayName ()

{

Systeem. uit. print naam: ");

Systeem. uit. println (knooppunt. getNodeName ());

}

void displayValue ()

{

String nodeValue = knooppunt. getNodeValue ();

if (nodeValue! = Null)

nodeValue = nodeValue. trimmen ();

Systeem. uit. print ("Waarde:");

Systeem. uit. println (nodeValue);

}

void displayAttributes ()

{

NamedNodeMap attribs = node. GetAttributes ();

voor (int i = 0; i

{

Systeem. uit. println ();

Systeem. uit. print ("Kenmerk:");

Systeem. uit. print (attribs. item (i). getNodeName ());

Systeem. uit. print ("=");

Systeem. uit. println (attribs. item (i). getNodeValue ());

}

}

void displayChildren ()

{

Knooppuntkind = knooppunt. getFirstChild ();

while (child! = Null)

{

nieuwe MyTreeTraverser (child);

kind = kind. getNextSibling ();

}

}

}

De code in listing 2 is veel algemener. Deze code controleert de documentstructuur terwijl deze wordt uitgevoerd. Wanneer de code een kindknoop vindt, scant het het kind en zoekt het naar kleinkinderen. Als er geen kleinkinderen zijn, zoekt de code naar broers en zussen. De code kan elke documentstructuur aan - of het nu een knooppunt of duizend knooppunten betreft.

Zo is listing 2 veelzijdiger dan listing 1. Deze veelzijdigheid kent echter ook nadelen - inclusief de mogelijkheid van zeer hoge overheadkosten. De code in Listing 2 moet het volledige XML-document ontleden en vervolgens een weergave van de structuur van het document in het geheugen van de computer plaatsen. Als het document erg groot is, is de weergave groot: het geheugen wordt opgeblazen door al die tijdelijke gegevens en de code in listing 2 wordt langzamer.

De voordelen van maatwerk

Stel u voor dat u probeert naar Faneuil Hall in Boston, Massachusetts te rijden. Het maakt niet uit waar je begint; de reis zal altijd verwarrend en moeilijk zijn. Hoe dan ook, je moet je route plannen. Je kunt verdwalen in het nabijgelegen Revere of Cambridge of in het centrum van Boston. Afhankelijk van uw bronnen heeft u twee opties:

  • U kunt stoppen bij een benzinestation en een kaart kopen. Als je dat doet, kom je misschien nooit in Faneuil Hall. Je moet immers vinden waar je bent op de kaart, alternatieve routes zoeken, een route kiezen en vervolgens (de hemel helpen) proberen de route te volgen zonder opnieuw verloren te gaan.
  • U kunt uw dure, sprekende GPS-systeem vertellen dat u naar Faneuil Hall wilt gaan. Het systeem zal een aangepaste route plotten en u begeleiden, om beurten draaien, van welke ellendige plaats u ook bent naar de optimale route die van daar naar Faneuil Hall leidt. De route is zo aangepast dat de GPS-stem zegt (bijvoorbeeld): "Er is geen teken op dit kruispunt, maar sla toch linksaf. "Later zegt de stem:" Er zijn twee tekens op dit kruispunt en de tekens spreken elkaar tegen. Maar hoe dan ook, sla rechtsaf. "

Het gebruik van de papieren kaart kost meer werk (meer tijd, moeite, behendigheid en geduld) dan het gebruik van de sprekende GPS. Waarom? Omdat de papieren kaart niet is aangepast aan uw specifieke behoeften; in feite staat er: "Hier is het hele metropolitaanse gebied van Boston. Faneuil Hall zit daar ergens in. U komt erachter wat u vervolgens moet doen. "

Een aangepast systeem is (zoals u zou verwachten) gemakkelijker te gebruiken dan een systeem dat niet is aangepast aan uw onmiddellijke situatie. De XML-verwerkingscode van Listing 2 maakt dus een enorme, resource-gulping DOM-boom in de geheugenruimte van je computer ("Hier is de boom - jij komt erachter wat je vervolgens moet doen …") omdat de code niet ' t aangepast.De code werkt voor elk oud document - niet alleen degene die u bij de hand hebt - en haalt altijd middelen bij elkaar om het te doen.

De essentie van JAXB

Het idee achter JAXB is om op maat gemaakte lessen te maken die aan uw huidige behoeften voldoen. U neemt de beschrijving van een XML-document, voert het door een speciaal programma, een schema-compilator , en krijgt een geheel nieuwe klasse, de gegenereerde klasse . Deze gegenereerde klasse is gestroomlijnd om met bepaalde XML-documenten te werken.

Als uw XML-documenten bijvoorbeeld elementen met de naam Total hebben, kan de gegenereerde klasse setTotal en getTotal-methoden hebben. Als het element van een document een kenmerk fullName heeft, kan de gegenereerde klasse de methoden setFullName en getFullName hebben. (Zie afbeelding 1.)

De verbinding tussen een deel van een XML-document en een deel van een Java-klasse wordt een binding genoemd. Met al deze bindingen vertegenwoordigt een exemplaar van de klasse een enkel XML-document.

Afbeelding 1: Een object staat voor een document.

Dus hoe verbindt u een object met een XML-document? Nou, de gegenereerde klasse heeft methoden met de naam unmarshal en marshal. (Zie afbeelding 2.)

  • De methode unmarshal leest een XML-bestand. De methode haalt waarden op uit het XML-document en wijst deze waarden toe aan variabelen in het Java-object.
  • De marshal-methode schrijft een XML-bestand. De methode krijgt waarden van het Java-object en gebruikt deze waarden om het XML-document te maken.

Met methoden zoals deze kunt u de gegevens in een XML-document ophalen en wijzigen.

Afbeelding 2: Lees- en schrijfwaarden.

Aangepaste code bouwen met Java API voor XML Binding (JAXB) - dummies

Bewerkers keuze

Hoe u Flash-video maakt en codeert - dummies

Hoe u Flash-video maakt en codeert - dummies

Als de pagina's die u maakt, zijn gewonnen ' t kan worden bekeken op mobiele apparaten (zoals een iPad of een smartphone), kunt u webpagina's maken met prachtige Flash-video. Adobe Flash Professional CS6 heeft een eigen ingebouwde video-encoder. Full-motionvideo in Flash is iets heel moois. U past de video aan voor het bekijken door de doelgroep ...

Hoe een aanpasbare interface te maken in CSS3 - dummies

Hoe een aanpasbare interface te maken in CSS3 - dummies

De grote variëteit en soorten schermen gebruikt om informatie weer te geven, maakt het nodig dat uw CSS3-commando's de gebruiker toestaan ​​om het formaat van de elementen naar wens aan te passen. In de meeste gevallen kunt u de gebruiker eenvoudig toestaan ​​om het element op elke gewenste grootte te maken. Er kunnen zich echter situaties voordoen waarin u de grootte van de grootte moet controleren ...

Hoe u een eenvoudige tabel op uw webpagina maakt - dummies

Hoe u een eenvoudige tabel op uw webpagina maakt - dummies

Tabellen laten u organiseer informatie op uw webpagina en geef het een georganiseerde uitstraling die uw bezoekers nuttig zullen vinden. Bij gebruik zoals bedoeld, hebben tabellen rijen en kolommen. Voor elke spot waar een rij en kolom elkaar kruisen, hebt u een tabelcel. Elke cel kan zijn eigen opmaak hebben: de gegevens erin ...

Bewerkers keuze

Hoe Postproduction Shareninging Filters werken - dummies

Hoe Postproduction Shareninging Filters werken - dummies

Verscherpingsfilters werken in postproductie door de randen (of aangrenzende gebieden met tonaal contrast) te benadrukken aan elkaar) in een afbeelding. Ze creëren een fijne highlight aan de donkere kant van de rand en een piepklein lowlight aan de lichtere kant van de rand. Dit toegevoegde contrast zorgt ervoor dat de randen er scherper uitzien vanaf een ...

HDR Work-Flow voor foto's met één belichting - dummies

HDR Work-Flow voor foto's met één belichting - dummies

In grote lijnen, enkele belichting hoog dynamisch bereik volgt dezelfde workflow als HDR-fotografie tussen haakjes. Er kunnen kleine verschillen zijn, dus hier is een overzicht van de werkstroom: configureer uw camera voor single-shot HDR. Het enige dat u zoekt, is de beste foto die u kunt maken. Besteed aandacht aan de lichtomstandigheden, het onderwerp, beweging en ...

Geavanceerde compacte en superzoomcamera's voor HDR-fotografie - dummies

Geavanceerde compacte en superzoomcamera's voor HDR-fotografie - dummies

Stap omhoog van compacte digitale camera's binnen het budgetbereik, vindt u duurdere compacte digitale camera's voor HDR-fotografie, ook wel high-end compacts, superzoomlenzen en dSLR-look-alikes genoemd. Er zijn zoveel vaak overlappende categorieën dat het je hoofd laat draaien. De twee dingen die deze reeks camera's gemeen hebben, zijn hun ...

Bewerkers keuze

In te schakelen Class Tracking in QuickBooks 2013 - dummies

In te schakelen Class Tracking in QuickBooks 2013 - dummies

Om activity-based costing te gebruiken (ABC ) in QuickBooks 2013 moet u de QuickBooks Class Tracking-functie inschakelen. Met Class Tracking kunt u inkomsten- en onkostentransacties categoriseren als niet alleen vallen in inkomsten- en uitgavenrekeningen, maar ook als vallen in bepaalde klassen. Volg deze stappen om Class Tracking in QuickBooks in te schakelen: Kies Bewerken → Voorkeuren ...

Gebruikt om een ​​exemplaar van een QuickBooks-gegevensbestand te gebruiken - dummies

Gebruikt om een ​​exemplaar van een QuickBooks-gegevensbestand te gebruiken - dummies

Ongeacht of de client verzendt handmatig een accountantskopie van een QuickBooks-gegevensbestand, e-mails een accountantsexemplaar, of verzendt een accountantskopie via de Intuit-bestandsoverdrachtservice, u gebruikt de kopie van de accountant door Bestand → Verzend bedrijfsdossier → Accountantskopie → Open & converteer overzetten te kiezen Bestand commando. Wanneer u deze opdracht kiest, geeft QuickBooks een ...

Hoe Audit Trails te gebruiken in QuickBooks - dummies

Hoe Audit Trails te gebruiken in QuickBooks - dummies

Als u besluit om meerdere gebruikers toegang te geven tot de QuickBooks-gegevens bestand, zult u de QuickBooks Audit Trail-functie waarderen, die bijhoudt wie welke wijzigingen aan het QuickBooks-gegevensbestand aanbrengt. U kunt transacties niet verwijderen uit de lijst of geschiedenis van de audittrail, behalve door gegevens te archiveren en te condenseren. Audit trail inschakelen ...