!!! Listing 1 import java.io.File; import java.io.FileReader; import java.io.PrintStream; import org.xml.sax.AttributeList; import org.xml.sax.HandlerBase; import org.xml.sax.InputSource; import org.xml.sax.Parser; import org.xml.sax.SAXException; public class HTMLConverterSAX extends HandlerBase { PrintStream out; public HTMLConverterSAX(PrintStream out) { this.out = out; } public void startDocument() throws SAXException { out.println("\n\nTelefonliste\n"); out.println("\n"); } public void endDocument() throws SAXException { out.println("\n\n"); } public void startElement(java.lang.String name, AttributeList atts) throws SAXException { if (name.equals("MITARBEITER")) { out.print(""); } else if (name.equals("TELEFONLISTE")) { out.println("

Telefonliste

\n"); } else { out.print(""); } else if (name.equals("TELEFONLISTE")) { out.println("
"); } } public void endElement(java.lang.String name) throws SAXException { if (name.equals("MITARBEITER")) { out.println("
"); } } public void characters(char[] ch, int start, int length) throws SAXException { out.print(unicode2HTML(ch, start, length)); } String unicode2HTML(char[] ch, int start, int length) { StringBuffer s = new StringBuffer(); for (int i = start; i < start+length; i++) { switch(ch[i]) { case 'ä': s.append("ä"); break; case 'ö': s.append("ö"); break; case 'ü': s.append("ü"); break; case 'ß': s.append("ß"); break; case '\u00e9': s.append("é"); break; default: s.append(ch[i]); } } return s.toString(); } public static void main(String[] args) throws Exception { Parser parser = new com.sun.xml.parser.Parser(); parser.setDocumentHandler(new HTMLConverterSAX(System.out)); InputSource source = new InputSource(new FileReader(args[0])); source.setSystemId("file:"+new File(args[0]).getAbsolutePath()); parser.parse(source); } } !!! Listing 2 !!! Listing 3 Henning Behme hb@ix.heise.de -374 Jürgen Seeger js@ix.heise.de -386 André von Raison avr@ix.heise.de -377 !!! Listing 4 import java.io.FileReader; import java.io.PrintStream; import org.w3c.dom.Document; import org.w3c.dom.Node; import com.ibm.xml.parser.NonRecursivePreorderTreeTraversal; import com.ibm.xml.parser.Parser; import com.ibm.xml.parser.TXDocument; import com.ibm.xml.parser.TXElement; import com.ibm.xml.parser.NOOPVisitor; import com.ibm.xml.parser.TXText; public class HTMLConverterIBM extends NOOPVisitor { PrintStream out; public HTMLConverterIBM(PrintStream out) { this.out = out; } // Kopf und Fuss analog SAX-Beispiel public void visitElementPre(TXElement element) { String name = element.getName(); if (name.equals("MITARBEITER")) { out.print(""); } else if (name.equals("TELEFONLISTE")) { out.println("

Telefonliste

\n"); } else if (name.equals("EMAIL")) { Node child; String email; // Zugriff auf Tochterknoten child = element.getFirstChild(); email = ((TXText)child).getText(); out.print(""); } else if (name.equals("TELEFONLISTE")) { out.println("
"); } else { out.print(""); } } public void visitElementPost(TXElement element) { String name = element.getName(); if (name.equals("MITARBEITER")) { out.println("
"); } else { if (name.equals("EMAIL")) { out.print(""); } out.print(""); } } // Text-Ausgabe analog SAX-Beispiel public static void main(String[] args) throws Exception { Parser parser = new Parser(""); NonRecursivePreorderTreeTraversal traversal; HTMLConverterIBM converter; converter = new HTMLConverterIBM(System.out); traversal = new NonRecursivePreorderTreeTraversal(converter); Document document = parser.readStream(new FileReader(args[0])); traversal.traverse(document); } } !!! Listing 5 import com.ibm.xml.parser.TXElement; public class Mitarbeiter extends TXElement { String name, email, phone; public Mitarbeiter() { super("MITARBEITER"); } public String getName() { return name; } public String getEmail() { return email; } public String getPhone() { return phone; } public void setName(String name) { this.name = name; } public void setEmail(String email) { this.email = email; } public void setPhone(String phone) { this.phone = phone; } } import com.ibm.xml.parser.TXDocument; import com.ibm.xml.parser.TXText; import org.w3c.dom.Element; import org.w3c.dom.Node; public class BeanFactory extends TXDocument { public Element createElement(String tagName) { if (tagName.equals("MITARBEITER")) { Node node; Mitarbeiter bean; // Bean erzeugen bean = new Mitarbeiter(); bean.setFactory(this); // Daten aus den Tochterknoten holen node = bean.getElementNamed("NAME").getFirstChild(); bean.setName(((TXText)node).getText()); node = bean.getElementNamed("EMAIL").getFirstChild(); bean.setEmail(((TXText)node).getText()); node = bean.getElementNamed("PHONE").getFirstChild(); bean.setPhone(((TXText)node).getText()); return bean; } else return super.createElement(tagName); } }