Mere XML i Java. Denne artikel beskriver brug af XML i Java udover parsning (som er beskrevet i artiklen "XML parsning i Java").

Relaterede dokumenter
XML parsning i Java. Denne artikel beskriver hvordan man parser XML i Java. Den beskriver W3C DOM, SAX og JDOM.

Denne artikel gennemgår kort nogle mulighederne for brug af XML i ASP. Det sker ved brug af eksempler. Eksemplerne vil være i VBS.

Nye Java XML API'er

Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#.

Den forudsætter kendskab til XML og VB.NET men ikke til brug af XML i VB.NET.

XML i PHP. Denne artikel gennemgår kort nogle af de mange muligheder for brug af XML i PHP. Det sker ved brug af eksempler. Eksemplerne kræver PHP 5.

Send fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende fra Java.

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.

Anvendelse af metoder - Programmering

Singleton pattern i Java

RMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer.

Kontrol-strukturer i PHP

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.

Logging i Java. Den forudsætter kendskab til Java og noget generel udviklings erfaring. Denne guide er oprindeligt udgivet på Eksperten.

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET.

Singleton pattern i C#

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Test med JUnit 3. Denne artikel introducerer JUnit 3. Den forklarer ideen med JUnit. Og den viser hvordan man konkret bruger det.

SAX Simple API for XML.

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

Forskellige Java versioner

Webserverprogrammering

Skrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

At klippe en streng over på det mest hensigtsmæssige sted

Introduktion til SQL queries

Introduktion til funktioner, moduler og scopes i Python

Bits, bit operationer, integers og floating point

Java Klasse nedarvninger

Introduction til.net remoting i C#

Databaseadgang fra Java

Data load og udtræk. 2. iteration: implmentation (test af backend) PHP mysql. Loade og parse XML (SimpleXML, Xpath) Filhåndtering i PHP JSON

Hvad er Objekter - Programmering

Undtagelseshåndtering i C#

applikation----x----odbc driver manager----foobar ODBC driver----foobar database

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste

DOM Document Object Model:

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Om binære søgetræer i Java

Nye features i Java 1.7/7.0

SWC eksamens-spørgsmål. Oversigt

Afsending af s vha. ASP

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 13/ Side 1 af 7

Database design for begyndere

Arkitektur for begyndere

Offset til terminalskærm i Java

Introduction til.net remoting i VB.NET

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Google App Engine. Google App Engine som platform. Claus Myglegaard Vagner og Jacob von Eyben

Skriftlig eksamen i Datalogi

MySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere.

Tredjepart webservices

Test med NUnit. Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det.

Arrays i PHP. Denne guide er oprindeligt udgivet på Eksperten.dk. Skrevet den 04. Feb 2009 af taskmgr I kategorien Programmering / PHP

SigmaT.

SESSION med PHP. En let begynderguide som kan føre dig ind i en verden af muligheder. Denne guide er oprindeligt udgivet på Eksperten.

Namespaces. Vi kan kvalificere elementer på denne måde: <?xml version="1.0" encoding="iso "?>

Introduktion til ant. Denne artikel beskriver Apache ant, som er et værktøj til at builde Java applikationer med.

Test af It-komponent

Database programmerings tips

Geografisk lokalisering i JSP

Civilingeniøreksamen januar Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal.

Koden i denne guide vil kun virke i Flash MX 2003 og MX ikke ældre versioner!

Virkefeltsregler i Java

Løsning af møntproblemet

Forelæsning Uge 2 Mandag

Derfor vil jeg bygge dette eksempel på een table hvor der kan tilkyttes personer til ALLE noder og der kan tilføjes et vilkårligt antal niveauer

SAX Simple API for XML.

Indhold. Senest opdateret:03. september Side 1 af 8

Geografisk lokalisering i ASP.NET

Kursusarbejde 3 Grundlæggende Programmering

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

I denne artikel vil jeg gennemgå hvordan en side for RSS "Live Bogmærke" kan se ud.

A Profile for Safety Critical Java

Ratingsystem i PHP og MySQL

Opgaven fortsat. Opfølgning på Opgave 2 og Use Cases. Opgaven. Trin 1: Væsentlige begreber. Resultatliste: 100 bryst, herrer

Find største element, sæt det på sidste plads. Grundidé i hobsortering. er er

Indhold. Senest opdateret : 30. juli Side 1 af 5

Skriftlig eksamen i Datalogi

Database for udviklere. Jan Lund Madsen PBS10107

Delphi og Databaser for begyndere

Import af rekursivt (parent-child) hierarki i Palo

DANMARKS TEKNISKE UNIVERSITET

Java web applikationer med Tomcat

I mit script tager jeg højde for det problem ved, at gemme et unikt tal mellem 0-9 på 6 cifre og derved vil de så blive vist som 2 online.

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

Programmering I Java/C#

Vejledende løsninger

Delphi - CrackMe og Keygen

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

PHP Pagination. Denne guide er oprindeligt udgivet på Eksperten.dk. Skrevet den 01. May 2011 af dab93 I kategorien Programmering / Andre

Spring Schema Extension eller Spring Domain Specific Languages

Dynamisk PHP design OPDATERET

Serialization i Java

Transkript:

Denne guide er oprindeligt udgivet på Eksperten.dk Mere XML i Java Denne artikel beskriver brug af XML i Java udover parsning (som er beskrevet i artiklen "XML parsning i Java"). Den beskriver bl.a. udskrivning og ændring af XML. Den forudsætter kendskab til Java og XML samt lidt kendskab til XML parsning i Java. Skrevet den 15. Feb 2010 af arne_v I kategorien Programmering / Java [vigtigt: artikel http://www.eksperten.dk/guide/281 er samme artikel som denne - der gik koks i det i forbindelse med 2 store nedbrud på Eksperten for mange år siden - først ville jeg ikke slette en af dem af hensyn til dem som havde "betalt" for artiklen og nu beholder jeg duplikaterne af hensyn til afgivne kommentarer] Historie: V1.0-03/04/2004 - original V1.1-07/04/2004 - understrege at teorien er beskrivet i den første artikel V1.2-25/07/2004 - tilføje lidt flere forklaringer V1.3-12/12/2004 - opdatere fra JDOM B8 til JDOM 1.0 (der er faktisk ændringer i JDOM interfacet) V1.4-20/08/2005 - tilføje brug af XPath V1.5-26/12/2006 - tilføje standard løsninger som har erstattet Xerces specifikke løsninger og tilføje links V1.6-14/02/2010 - smårettelser Indledning For beskrivelse af W3C DOM og JDOM henvises til artiklen http://www.eksperten.dk/artikler/100 "XML parsning i Java". Der er hele teorien. Det forudsættes at teorien og parse teknikken er kendt. Her vil vi fokusere på brug af W3C DOM og JDOM til andet end parsning. SAX vil ikke blive omtalt da processingen af de indlæste data sker løbende i forbindelse med parsningen og er 100% applikations specifik. Eksemplerne vil bruge følgende fil: test.xml <?xml version='1.0' standalone='yes'?> <medlemmer> <medlem no="1"> <navn>niels Nielsen</navn> <adresse>nellikevej 19</adresse> </medlem>

<medlem no="2"> <navn>jens Jensen</navn> <adresse>jagtvej 17</adresse> </medlem> <medlem no="3"> <navn>ole Olsen</navn> <adresse>omfartsvejen 13</adresse> </medlem> <medlem no="4"/> </medlemmer> Udskrift W3C DOM træ Når man nu har lært at læse XML filer ind er det jo naturligt at ville kunne skrive dem ud igen. Der er forskellige måder at udskrive et W3C DOM træ på: - selv skrive noget kode - bruge noget Xerces specifik kode - bruge noget standard kode hvis ens JAXP version er tilstrækkelig ny - bruge XSLT Alle 3 metoder vil blive vist. Først gør det selv koden som består af en enkelt metode writexml som man kalder med en node. Metoden udskriver så start tag med attributter, kalder sig selv rekursivt for child elementer og udskriver slut tag. Når den kaldes med document root, så udskriver den hele DOM træet. WriteW3CDOMCustom.java import java.io.printstream; import javax.xml.parsers.documentbuilderfactory; import javax.xml.parsers.factoryconfigurationerror; import org.w3c.dom.document; import org.w3c.dom.namednodemap; import org.w3c.dom.node; import org.w3c.dom.nodelist; import org.xml.sax.saxexception; public class WriteW3CDOMCustom { public static void writexml(printstream ps, String ind, Node parent) { switch (parent.getnodetype()) { case Node.ELEMENT_NODE : ps.print(ind + "<" + parent.getnodename()); NamedNodeMap atts = parent.getattributes();

for (int i = 0; i < atts.getlength(); i++) { ps.print(" " + atts.item(i).getnodename() + "=\"" + atts.item(i).getnodevalue() + "\""); NodeList childs = parent.getchildnodes(); if (childs.getlength() == 0) { ps.println("/>"); else { ps.println(">"); for (int i = 0; i < childs.getlength(); i++) { writexml(ps, ind + " ", (Node) childs.item(i)); ps.println(ind + "<" + parent.getnodename() + "/>"); break; case Node.TEXT_NODE : if(!parent.getnodevalue().trim().equals("")) { ps.println(ind + parent.getnodevalue().trim()); break; default : // nothing return; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Document doc = db.parse("c:\\test.xml"); writexml(system.out, "", doc.getdocumentelement()); catch (FactoryConfigurationError e) { catch (ParserConfigurationException e) { catch (SAXException e) { catch (IOException e) { return; Den nok mest brugte XML Java parser nemlig Xerces kommer med en en klasse XMLSerializer til at udskrive DOM træer med. Vigtigt: brug en OutputFormat'er med indenting true - ellers ser output ikke godt ud. WriteW3CDOMXerces.java

import javax.xml.parsers.documentbuilderfactory; import javax.xml.parsers.factoryconfigurationerror; import org.w3c.dom.document; import org.xml.sax.saxexception; import org.apache.xml.serialize.outputformat; import org.apache.xml.serialize.xmlserializer; public class WriteW3CDOMXerces { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Document doc = db.parse("c:\\test.xml"); OutputFormat fmt = new OutputFormat(); fmt.setindenting(true); XMLSerializer ser = new XMLSerializer(System.out, fmt); ser.serialize(doc); catch (FactoryConfigurationError e) { catch (ParserConfigurationException e) { catch (SAXException e) { catch (IOException e) { return; Efter mange år uden en standard måde at udskrive DOM træer med kom der en metode. Bemærk: denne metode kræver en nyere JAXP (enten nyere Java eller en nyere Xerces), fordi den kræver DOM 3.0! WriteW3CDOMStandard.java import javax.xml.parsers.documentbuilderfactory; import javax.xml.parsers.factoryconfigurationerror;

import org.w3c.dom.document; import org.w3c.dom.domimplementation; import org.w3c.dom.bootstrap.domimplementationregistry; import org.w3c.dom.ls.domimplementationls; import org.w3c.dom.ls.lsoutput; import org.w3c.dom.ls.lsserializer; import org.xml.sax.saxexception; public class WriteW3CDOMStandard { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Document doc = db.parse("c:\\test.xml"); DOMImplementation impl = DOMImplementationRegistry.newInstance().getDOMImplementation("XML 3.0"); DOMImplementationLS feature = (DOMImplementationLS)impl.getFeature("LS","3.0"); LSSerializer ser = feature.createlsserializer(); LSOutput output = feature.createlsoutput(); output.setcharacterstream(system.console().writer()); ser.write(doc, output); catch (FactoryConfigurationError e) { catch (ParserConfigurationException e) { catch (SAXException e) { catch (IOException e) { catch (ClassNotFoundException e) { catch (InstantiationException e) { catch (IllegalAccessException e) { return; Mens man ventede på DOM 3.0 fandt snedige folk ud af at man kunne bruge XSLT med et tomt XSL til at udskrive med. WriteW3CDOMXSLT.java

import javax.xml.parsers.documentbuilderfactory; import javax.xml.parsers.factoryconfigurationerror; import javax.xml.transform.transformer; import javax.xml.transform.transformerconfigurationexception; import javax.xml.transform.transformerexception; import javax.xml.transform.transformerfactory; import javax.xml.transform.dom.domsource; import javax.xml.transform.stream.streamresult; import org.w3c.dom.document; import org.xml.sax.saxexception; public class WriteW3CDOMXSLT { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Document doc = db.parse("c:\\test.xml"); TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newtransformer(); t.transform(new DOMSource(doc), new StreamResult(System.out)); catch (FactoryConfigurationError e) { catch (ParserConfigurationException e) { catch (SAXException e) { catch (IOException e) { catch (TransformerConfigurationException e) { catch (TransformerException e) { return; Udskrift JDOM træ JDOM har en indbygget måde at udskrive et træ på som iøvrigt ligner Xerces en del. WriteJDOM.java import java.io.fileinputstream; import java.io.filenotfoundexception;

import org.jdom.document; import org.jdom.jdomexception; import org.jdom.adapters.domadapter; import org.jdom.adapters.xercesdomadapter; import org.jdom.input.dombuilder; import org.jdom.output.format; import org.jdom.output.xmloutputter; public class WriteJDOM { DOMAdapter da = new XercesDOMAdapter(); org.w3c.dom.document w3cdoc = da.getdocument(new FileInputStream("C:\\test.xml"), false); DOMBuilder b = new DOMBuilder(); Document doc = b.build(w3cdoc); XMLOutputter fmt = new XMLOutputter(Format.getPrettyFormat()); System.out.println(fmt.outputString(doc)); catch (FileNotFoundException e) { catch (IOException e) { catch (JDOMException e) { catch (Exception e) { Ændring af og helt nyt W3C DOM træ En anden naturlig ting er at ville er at ændre et indlæst træ. Det er ret simpelt. Dokumentet har metoder til at oprette nye noder og alle noder har en metode til at tilføje de nyoprettede noder som børn. ChangeW3CDOM.java import javax.xml.parsers.documentbuilderfactory; import javax.xml.parsers.factoryconfigurationerror; import org.w3c.dom.document; import org.w3c.dom.element;

import org.w3c.dom.node; import org.w3c.dom.nodelist; import org.xml.sax.saxexception; import org.apache.xml.serialize.outputformat; import org.apache.xml.serialize.xmlserializer; public class ChangeW3CDOM { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Document doc = db.parse("c:\\test.xml"); // fjern tomme medlemmer NodeList elements = doc.getelementsbytagname("medlem"); for (int i = 0; i < elements.getlength(); i++) { Node element = (Element) elements.item(i); if(!element.haschildnodes()) { element.getparentnode().removechild(element); // tilføj nyt medlem Element navn = doc.createelement("navn"); navn.appendchild(doc.createtextnode("lars Larsen")); Element adresse = doc.createelement("adresse"); adresse.appendchild(doc.createtextnode("ledvej 14")); Element medlem = doc.createelement("medlem"); medlem.setattribute("no", "4"); medlem.appendchild(navn); medlem.appendchild(adresse); doc.getdocumentelement().appendchild(medlem); OutputFormat fmt = new OutputFormat(); fmt.setindenting(true); XMLSerializer ser = new XMLSerializer(System.out, fmt); ser.serialize(doc); catch (FactoryConfigurationError e) { catch (ParserConfigurationException e) { catch (SAXException e) { catch (IOException e) { return; Og at oprette et helt nyt træ er helt tilsvarende.

CreateW3CDOM.java import javax.xml.parsers.documentbuilderfactory; import javax.xml.parsers.factoryconfigurationerror; import org.w3c.dom.document; import org.w3c.dom.element; import org.apache.xml.serialize.outputformat; import org.apache.xml.serialize.xmlserializer; public class CreateW3CDOM { // lav nyt DOM træ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Document doc = db.newdocument(); // tilføj elementer til DOM træ Element one1 = doc.createelement("one"); one1.appendchild(doc.createtextnode("a")); Element one2 = doc.createelement("one"); one2.appendchild(doc.createtextnode("bb")); Element one3 = doc.createelement("one"); one3.appendchild(doc.createtextnode("ccc")); Element all = doc.createelement("all"); all.appendchild(one1); all.appendchild(one2); all.appendchild(one3); doc.appendchild(all); OutputFormat fmt = new OutputFormat(); fmt.setindenting(true); XMLSerializer ser = new XMLSerializer(System.out, fmt); ser.serialize(doc); catch (FactoryConfigurationError e) { catch (ParserConfigurationException e) { catch (IOException e) { return; Ændring af og helt nyt JDOM træ

Med hensyn til at ændre og oprette træer ligner JDOM faktisk meget W3C DOM. Man kan bare oprette node med en almindelig constructor og interfacet er en anelse mere naturligt. ChangeJDOM.java import java.io.fileinputstream; import java.io.filenotfoundexception; import java.util.list; import org.jdom.document; import org.jdom.element; import org.jdom.jdomexception; import org.jdom.adapters.domadapter; import org.jdom.adapters.xercesdomadapter; import org.jdom.input.dombuilder; import org.jdom.output.format; import org.jdom.output.xmloutputter; public class ChangeJDOM { DOMAdapter da = new XercesDOMAdapter(); org.w3c.dom.document w3cdoc = da.getdocument(new FileInputStream("C:\\test.xml"), false); DOMBuilder b = new DOMBuilder(); Document doc = b.build(w3cdoc); // fjern tomme medlemmer List list = doc.getrootelement().getchildren(); for (int i = 0; i < list.size(); i++) { Element elm = (Element) list.get(i); if(elm.getchildren().size() == 0) { elm.getparent().removecontent(elm); // tilføj nyt medlem Element navn = new Element("navn"); navn.settext("lars Larsen"); Element adresse = new Element("adresse"); adresse.settext("ledvej 14"); Element medlem = new Element("medlem"); medlem.addcontent(navn); medlem.addcontent(adresse); medlem.setattribute("no", "4"); doc.getrootelement().addcontent(medlem); XMLOutputter fmt = new XMLOutputter(Format.getPrettyFormat()); System.out.println(fmt.outputString(doc)); catch (FileNotFoundException e) { catch (IOException e) {

catch (JDOMException e) { catch (Exception e) { CreateJDOM.java import org.jdom.document; import org.jdom.element; import org.jdom.output.format; import org.jdom.output.xmloutputter; public class CreateJDOM { // lav nyt DOM træ Document doc = new Document(); // tilføj elementer til DOM træ Element one1 = new Element("one"); one1.settext("a"); Element one2 = new Element("one"); one2.settext("bb"); Element one3 = new Element("one"); one3.settext("ccc"); Element all = new Element("all"); all.addcontent(one1); all.addcontent(one2); all.addcontent(one3); doc.setrootelement(all); XMLOutputter fmt = new XMLOutputter(Format.getPrettyFormat()); System.out.println(fmt.outputString(doc)); Walker W3C DOM har en smart måde at søge et træ igennem efter en bestemt slags noder. Bemærk at denne feature er meget ny og ikke er understøttet i Java SDK 1.4 XML support. Man er nødt til at bruge 1.5 eller at hente f.eks. en nyere Xerces. ScanWitHWalker.java

import javax.xml.parsers.documentbuilderfactory; import javax.xml.parsers.factoryconfigurationerror; import org.w3c.dom.document; import org.w3c.dom.node; import org.w3c.dom.traversal.documenttraversal; import org.w3c.dom.traversal.nodefilter; import org.w3c.dom.traversal.treewalker; import org.xml.sax.saxexception; public class ScanWithWalker { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Document doc = db.parse("c:\\test.xml"); // walk alle elementer af typen navn TreeWalker walk = ((DocumentTraversal) doc).createtreewalker(doc.getdocumentelement(), NodeFilter.SHOW_ELEMENT, null, false); Node n; while ((n = walk.nextnode())!= null) { if (n.getnodename().equals("navn")) { System.out.println(n.getFirstChild().getNodeValue()); catch (FactoryConfigurationError e) { catch (ParserConfigurationException e) { catch (SAXException e) { catch (IOException e) { Vi laver en walker som: - starter i document root - finder alle elementer - ikke har et filter Og så tester vi bare om elementet er et name. Den funktionalitet kunne også være lagt ind i et filter. Men det synes jeg ikke var umagen værd her.

Man kan selvfølgelig nemt selv lave noget kode som løber alle elementer igennem (f.eks. rekursivt lige som i writexml metoden i første program). Men walkeren giver noget pænt og let læseligt kode. XPath Hvis man kun skal bruge nogle ganske bestemte noder kan man selecte dem med XPath som er et query sprog til XML. Jeg vil ikke gå i detaljer med hensyn til XPath syntax det kan man og det er der skrevet bøger om. Den ultra korte version er: xxxx - finder elementer med navn xxxx //xxxx/yyyy - finder elementer med navn yyyy under elementer med navn xxxx xxxx[yyyy='abc'] - finder elementer med navn xxxx som har et under element med navn yyyy og en tekstværdi 'abc' xxxx[@yyyy=123] - finder elementer med navn xxxx som har en attribut med navn yyyy og en talværdi 123 Man kan bruge XPath i både W3C DOM og JDOM. XPath er ikke understøttet i Java SDK 1.4 XML support. Man er nødt til at bruge 1.5 eller at hente f.eks. en nyere Xerces. For W3C DOM findes der både en Xerces specifik og en standard måde at gøre det på. SelectWithXPathW3CDOMXerces.java: import javax.xml.parsers.documentbuilderfactory; import javax.xml.transform.transformerexception; import org.w3c.dom.document; import org.w3c.dom.element; import org.w3c.dom.nodelist; import org.xml.sax.saxexception; import org.apache.xpath.xpathapi; public class SelectWithXPathW3CDOM { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Document doc = db.parse("c:\\test.xml"); // find element hvor no=2 Element res1 =

(Element)XPathAPI.selectSingleNode(doc.getDocumentElement(), "/medlemmer/medlem[@no=2]"); Element name1 = (Element)res1.getElementsByTagName("navn").item(0); System.out.println(name1.getFirstChild().getNodeValue()); // find alle elementer hvor no >= 2 NodeList res2 = XPathAPI.selectNodeList(doc.getDocumentElement(), "/medlemmer/medlem[@no>=2]"); for(int i = 0; i < res2.getlength(); i++) { Element name2 = (Element)((Element)res2.item(i)).getElementsByTagName("navn").item(0); if(name2!= null) { System.out.println(name2.getFirstChild().getNodeValue()); catch (ParserConfigurationException e) { catch (SAXException e) { catch (IOException e) { catch (TransformerException e) { SelectWithXPathW3CDOMStandard.java: import javax.xml.parsers.documentbuilderfactory; import javax.xml.transform.transformerexception; import javax.xml.xpath.xpath; import javax.xml.xpath.xpathconstants; import javax.xml.xpath.xpathexpressionexception; import javax.xml.xpath.xpathfactory; import org.w3c.dom.document; import org.w3c.dom.element; import org.w3c.dom.nodelist; import org.xml.sax.saxexception; import org.apache.xpath.xpathapi; public class SelectWithXPathW3CDOMStandard {

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Document doc = db.parse("c:\\test.xml"); XPath xpath = XPathFactory.newInstance().newXPath(); // find element hvor no=2 Element res1 = (Element)xpath.evaluate("/medlemmer/medlem[@no=2]", doc.getdocumentelement(), XPathConstants.NODE); Element name1 = (Element)res1.getElementsByTagName("navn").item(0); System.out.println(name1.getFirstChild().getNodeValue()); // find alle elementer hvor no >= 2 NodeList res2 = (NodeList)xpath.evaluate("/medlemmer/medlem[@no>=2]", doc.getdocumentelement(), XPathConstants.NODESET); for(int i = 0; i < res2.getlength(); i++) { Element name2 = (Element)((Element)res2.item(i)).getElementsByTagName("navn").item(0); if(name2!= null) { System.out.println(name2.getFirstChild().getNodeValue()); catch (ParserConfigurationException e) { catch (SAXException e) { catch (IOException e) { catch (XPathExpressionException e) { SelectWithXPathJDOM.java: import java.io.fileinputstream; import java.io.filenotfoundexception; import java.util.list; import org.jdom.document; import org.jdom.element; import org.jdom.jdomexception; import org.jdom.adapters.domadapter; import org.jdom.adapters.xercesdomadapter; import org.jdom.input.dombuilder; import org.jdom.xpath.xpath; public class SelectWithXPathJDOM {

DOMAdapter da = new XercesDOMAdapter(); org.w3c.dom.document w3cdoc = da.getdocument(new FileInputStream("C:\\test.xml"), false); DOMBuilder b = new DOMBuilder(); Document doc = b.build(w3cdoc); // find element hvor no=2 Element res1 = (Element)XPath.selectSingleNode(doc, "/medlemmer/medlem[@no=2]"); System.out.println(res1.getChild("navn").getText()); // find alle elementer hvor no >= 2 List res2 = XPath.selectNodes(doc, "/medlemmer/medlem[@no>=2]"); for (int i = 0; i < res2.size(); i++) { Element name2 = ((Element)res2.get(i)).getChild("navn"); if(name2!= null) { System.out.println(name2.getText()); catch (FileNotFoundException e) { catch (IOException e) { catch (JDOMException e) { Videre Artiklen http://www.eksperten.dk/artikler/1261 "Nye Java XML API'er" beskriver: - StAX - JAXB - XStream Kommentar af simonvalter d. 05. Apr 2004 1 Viser igen nogen gode eksempler som ikke er større end at man aligevel kan sætte sig ind i dem og ændre dem til eget formål. jeg har brugt både denne og artiklen "XML parsning i Java" flere gange, og har fundet det meget lærerigt med et korrekt eksempel. Kommentar af mr.handstand d. 07. Apr 2004 2 Jeg ønskede en artikel - ikke 5 stk. copy-paste koder. Jeg forventer mere dybde i en artikel, end blot en sætning med ordene, "her kommer chocket". Kommentar af avj d. 16. Jun 2004 3 Kommentar af blackadder d. 03. Apr 2004 4

Det er mere en samling Java funktioner end en egentlig artikel. Der er meget kode, men ikke så meget forklaring. Kommentar af mikkelbm d. 15. Dec 2004 5 Alt i alt en god artikel. Og til kritikerne af artiklen vil jeg bare sige, at for mit vedkommende siger gode eksempler mange gange meget mere end en sides sludder for en sladder!!!