Das nachfolgende Beispiel parst einige Tags einer PAD Datei. Mit diesem Dateiformat können Sie Software beschreiben, welche Sie Softwarekatalogen im Internet eintragen möchten. Es ist insoweit ein (endlich) struktierter Nachfolger der DIZ Dateien.
Als erstes unsere kleine Startklasse. Die Aufgaben sind einfach gehalten.
package
de.bastie.xml.sax;import
java.io.IOException;import
org.xml.sax.InputSource;import
org.xml.sax.SAXException;import
org.xml.sax.XMLReader;import
org.xml.sax.helpers.XMLReaderFactory;/** * Ein Beispiel für die Arbeit mit eigenen SAX Handlern. * @author Bastie - Sebastian Ritter * @version getestet mit Java 1.5 */
public class
SampleSaxHandler {public
void teach () {try
{// einen XML Reader erzeugen
XMLReader reader = XMLReaderFactory.createXMLReader();// den eigenen Sax Content Handler registrieren
reader.setContentHandler(new
PadSaxHandler ());// unsere Beispiel XML Datei parsen
reader.parse(new
InputSource (this
.getClass().getResourceAsStream("makedesktopview_pad.xml"
))); }catch
(final
SAXException e) { e.printStackTrace(); }catch
(final
IOException e) { e.printStackTrace(); } }public static void
main (final
String [] args) { SampleSaxHandler padSample =new
SampleSaxHandler (); padSample.teach(); } }
Als zweites haben wir den wichtigen Teil - unsere SAX-Verarbeitungsklasse. Dieses muss
vom Typ ContentHandler
sein, wobei wir der Einfachheit halber von
DefaultHandler
ableiten.
all rights reserved © Bastie - Sebastian Ritter @: w³: http://www.Bastie.depackage
de.bastie.xml.sax;import
java.util.HashMap;import
org.xml.sax.Attributes;import
org.xml.sax.SAXException;import
org.xml.sax.helpers.DefaultHandler;/** * Ein spezieller Handler für die Verarbeitung von PAD Dateien. * Diese dienen zur Beschreibung von Software in Webkatalogen. * @author Bastie - Sebastian Ritter * @version getestet mit Java 1.5 */
public class
PadSaxHandlerextends
DefaultHandler {private int
tagHashCode =0
;/** * Ein paar interne Variablen zur Verarbeitung, diese enthalten unsere * PAD-XML-Tags, die wir auswerten wollen. */
final private static transient
String COMPANY_WEBSITE_URL ="Company_WebSite_URL"
, PROGRAM_NAME ="Program_Name"
, PROGRAM_VERSION ="Program_Version"
, PROGRAM_TYPE ="Program_Type"
, PROGRAM_LANGUAGE ="Program_Language"
, FILENAME_LONG ="Filename_Long"
, FILE_SIZE_BYTES ="File_Size_Bytes"
, SHORT_DESCRIPTION ="Char_Desc_45"
, LONG_DESCRIPTION ="Char_Desc_2000"
;private transient static final int
COMPANY_WEBSITE_URL =0
, PROGRAM_NAME =1
, PROGRAM_VERSION =2
, PROGRAM_TYPE =3
, PROGRAM_LANGUAGE =4
, FILENAME_LONG =5
, FILE_SIZE_BYTES =6
, SHORT_DESCRIPTION =7
, LONG_DESCRIPTION =8
;private static
HashMap<String,Integer> keyMap;public
PadSaxHandler () {if
(keyMap ==null
) { keyMap =new
HashMap<String,Integer> (); keyMap.put(COMPANY_WEBSITE_URL, COMPANY_WEBSITE_URL); keyMap.put(PROGRAM_NAME, PROGRAM_NAME); keyMap.put(PROGRAM_VERSION, PROGRAM_VERSION); keyMap.put(PROGRAM_TYPE, PROGRAM_TYPE); keyMap.put(PROGRAM_LANGUAGE, PROGRAM_LANGUAGE); keyMap.put(FILENAME_LONG, FILENAME_LONG); keyMap.put(FILE_SIZE_BYTES, FILE_SIZE_BYTES); keyMap.put(SHORT_DESCRIPTION, SHORT_DESCRIPTION); keyMap.put(LONG_DESCRIPTION, LONG_DESCRIPTION); } }public void
characters(char
[] ch,int
start,int
length)throws
SAXException {if
(length >0
) {final
String content =new
String (ch,start,length).trim();if
(content.length() >0
) {switch
(this
.tagHashCode) {case
COMPANY_WEBSITE_URL : System.out.println("URL: "
+content);break
;case
PROGRAM_NAME : System.out.println("Name: "
+content);break
;case
PROGRAM_VERSION : System.out.println("Version: "
+content);break
;case
PROGRAM_TYPE : System.out.println("Lizenz: "
+content);break
;case
PROGRAM_LANGUAGE : System.out.println("Sprache: "
+content);break
;case
FILENAME_LONG : System.out.println("Dateiname: "
+content);break
;case
FILE_SIZE_BYTES : System.out.println("Größe: "
+content+" Bytes"
);break
;case
SHORT_DESCRIPTION : System.out.println("Kurzbeschreibung: "
+content);break
;case
LONG_DESCRIPTION : System.out.println("Langbeschreibung: "
+content);break
;default
: } } } }public void
endElement (final
String uri,final
String localName,final
String qName)throws
SAXException {// einfach aufräumen auch wenn unnötig
this
.tagHashCode =-1
; }public void
startElement (final
String uri,final
String localName,final
String qName,final
Attributes attributes)throws
SAXException {if
(keyMap.get(localName) !=null
)this
.tagHashCode = keyMap.get(localName);else
this
.tagHashCode =-2
; } }