Innehållsförteckning:
Video: Do XML ao Java 2024
Dikotomin mellan linjärt tänkande och holistiskt tänkande skiljer (respektive) SAX från DOM.
SAX (Simple API for XML) behandlar ett XML-dokument linjärt och arbetar genom ett dokument bit för bit, från början till slut. Men med DOM (Document Object Model) hoppar du in och tittar på hela dokumentet. Lite senare zoomar du in på rotelementet och fokuserar sedan närmare på ett element i rotelementet. I vissa situationer är hoppa in precis vad du behöver göra.
DOM-noder
Med DOM tänker du på ett XML-dokument som har flera noder . Exempel på noder inkluderar element, attribut, kommentarer och tecknen mellan ett par start- och slutkoder. Ett hel XML-dokument är i sig en nod. Sammantaget kan ett XML-dokument ha 12 olika typer av noder.
Noder av ett träd
Tillsammans bildar alla DOM-noderna i ett XML-dokument ett träd. Ta till exempel dokumentet i Listning 1. Detta dokuments DOM-träd ser ut som det träd som visas i Figur 1.
Listning 1: Anchovy Lovers Club
Grundare, VD, Sekreterare, Publicity Manager
Träet har elva noder. För att räkna dem börjar du med att räkna trädets grenar (visas bekvämt i Figur 1). Räkna sedan medlemsnamnet = "Herbert" -grenen en andra gång. (Denna gren har två DOM-noder på den. Elementet som heter Medlem är en nod, och elementets attribut firstname = "Herbert" är en nod.)
En avhandling på träd
Det finns några saker du kan upptäcka genom att stirra på trädet i Figur 1.
- Några noder är barn av andra noder. Exempelvis är medlemskoden ett barn i AnchovyLoversClub-noden. Det beror på att i medlemskap 1 är medlemelementet näst inom AncoverLoversClub-elementet.På samma sätt är Stående nod ett barn i medlemskoden. Denna familjeanalogi fortsätter och fortsätter. Medlemskoden är föräldern i Stående noden, och AncoverLoversClub är moderklubben för medlemskoden.
- Hela dokumentet är en nod. Detta är en viktig punkt, och det är lätt att glömma. I Listing 1 är dokumentets root element AnchovyLoversClub. Men i figur 1 är namnet AnchovyLoversClub inte på toppen av trädet. I stället är ordet #document längst upp i trädet.En DOM-träds översta nod representerar ett hel XML-dokument. Fel uppstår när programmerare tror att dokumentets rotelement startar trädet.(Det gör det inte.)
- Kommentarer och bitar av text är noder. I figur 1 är kommentaren en barnnod i dokumentnodet. Det beror på att i kommentar 1 är kommentaren en del av dokumentet. Kommentaren är inte nestad i något av dokumentets element.Än en gång spelar vi släktforskning. Vi säger att #documentnoden har två barn - en kommentarnod och en AnchovyLoversClub-nod. Dessa två noder - kommentaren och AnchovyLoversClub - heter syskon .Även i figur 1 är texten Grundare, VD, Sekreterare, Publicity Manager del av en nod. I Förteckning 1 är texten Grundare, VD, Sekreterare, Publicitetschef, Inom det Stående elementet. Så, i Figur 1, är denna textnod ett barn i Stående nod.
- Även ignorerad text är en del av en nod. Enligt figur 1 har AnchovyLoversClub-noden tre direkta barnnoder - två noder märkta #text och en annan nod-märkt medlem. Det beror på att, för DOM, har AnchovyLoversClub-noden tre saker i den.
vagnretur och tre blankor
Member element
vagnretur
-
Situationen illustreras i Figur 2.
-
De tre Barn i medlemskoden - två bitar av blankutrymme och ett stående element - är alla syskon.Lägg märke till prickarna och [cr] i figurerna 1 och 2. I trädiagrammet representerar en punkt ett tomrum och [cr] representerar en vagnretur. Med DOM startar all den obekvämda rymden mellan AnchovyLoversClub-taggen och medlemstarttaggen en nod. Börja med den vinkelbeslag som avslutar AnchovyLoversClub start taggen, går du till nästa rad och sedan har du tre tomma mellanslag före vinkelfästet som öppnar medlemstarttaggen. Allt det där är en DOM-nod.
- Slutkoder är inte noder. Med SAX kanske du tänker när det gäller att starta medlemmen, och senare sluta medlemsmedlet. I DOM tror du inte på det här sättet. I stället besöker du medlemsmedlet bara en gång. Inom det besöket besöker du Stående elementet och lite text. DOM har ingen metod som motsvarar SAX endElement-metoden.