NOTE:
These slides have not been updated since 2003. They have been superseded by the book
Anders Møller and Michael Schwartzbach, February 2006 |
THE XML REVOLUTION - TECHNOLOGIES FOR THE FUTURE WEB |
<cards> <card> <name>John Doe</name> <title>CEO, Widget Inc.</title> <email>john.doe@widget.com</email> <phone>(202) 456-1414</phone> <logo url="widget.gif" /> </card> <card> <name>Michael Schwartzbach</name> <title>Associate Professor</title> <email>mis@brics.dk</email> <phone>+45 8610 8790</phone> <logo url="http://www.brics.dk/~mis/portrait.gif" /> </card> <card> <name>Anders Møller</name> <title>Research Assistant Professor</title> <email>amoeller@brics.dk</email> <phone>+45 8942 3475</phone> <logo url="http://www.brics.dk/~amoeller/am.jpg"/> </card> </cards> |
We then write a Java program to edit such collections.
First, we need a high-level representation of a business card:
class Card { public String name, title, email, phone, logo; public Card(String name, String title, String email, String phone, String logo) { this.name = name; this.title = title; this.email = email; this.phone = phone; this.logo = logo; } } |
An XML document must then be translated into a vector of such objects:
Vector doc2vector(Document d) { Vector v = new Vector(); Iterator i = d.getRootElement().getChildren().iterator(); while (i.hasNext()) { Element e = (Element)i.next(); String phone = e.getChildText("phone"); if (phone==null) phone=""; Element logo = e.getChild("logo"); String url; if (logo==null) url = ""; else url = logo.getAttributeValue("url"); Card c = new Card(e.getChildText("name"), // exploit schema, e.getChildText("title"), // assume validity e.getChildText("email"), phone, url); v.add(c); } return v; } |
And back into an XML document:
Document vector2doc() { Element cards = new Element("cards"); for (int i=0; i<cardvector.size(); i++) { Card c = (Card)cardvector.elementAt(i); if (c!=null) { Element card = new Element("card"); Element name = new Element("name"); name.addContent(c.name); card.addContent(name); Element title = new Element("title"); title.addContent(c.title); card.addContent(title); Element email = new Element("email"); email.addContent(c.email); card.addContent(email); if (!c.phone.equals("")) { Element phone = new Element("phone"); phone.addContent(c.phone); card.addContent(phone); } if (!c.logo.equals("")) { Element logo = new Element("logo"); logo.setAttribute("url",c.logo); card.addContent(logo); } cards.addContent(card); } } return new Document(cards); } |
A little logic and some GUI then completes the editor:
Compile with: javac -classpath xerces.jar:jdom.jar BCedit.java
This example contains some general observations:
COPYRIGHT © 2000-2003 ANDERS MØLLER & MICHAEL I. SCHWARTZBACH |