XML als Datenaustauschformat / StAX

StAX

StAX

Die Streaming API for XML (StAX) bietet die Möglichkeit, XML Dokumente zu erzeugen und zu lesen, ohne sich im Code detailliert um Wohlgeformtheit Sorgen machen oder sich (wie bei DOM) erst einen kompletten Baum im Arbeitsspeicher generieren zu müssen, der dann abgespeichert werden kann.

Mit StAX ein XML Dokument erzeugen

Das Schreiben eines XML Dokuments kann einfach mit der Java-Klasse "XMLStreamWriter" geschehen


 public static void STAXDEMO(){
  try {
     String WG = "http://www.wilfried-grupe.de";
     XMLOutputFactory outfact = XMLOutputFactory.newInstance();
     XMLStreamWriter writer;
     writer = outfact.createXMLStreamWriter(System.out);
     writer.writeStartDocument();
     writer.writeProcessingInstruction(
        "xml-stylesheet href='tuwas.xsl' type='text/xsl'");     
     writer.writeStartElement("ROOT");
     writer.writeDefaultNamespace(WG);
     writer.writeAttribute("vorname","Resi");
     writer.writeAttribute("name","Denzschlos");     
     writer.writeStartElement(WG,"hi");
     writer.writeCharacters("Hallo Leute von heute & morgen");
     writer.writeEndElement();
     for(int i=1; i<5; i++){
      writer.writeStartElement(WG,"lfdnr");
      writer.writeCData(Integer.toString(i));
      writer.writeEndElement();      
     }
     writer.writeEndDocument();
     writer.close();
  } catch (IllegalArgumentException e) {
  } catch (FactoryConfigurationError e) {
  } catch (XMLStreamException e) {
  }
 }

Das erzeugte XML Dokument hat diesen Aufbau:


<?xml version="1.0" ?>
<?xml-stylesheet href='tuwas.xsl' type='text/xsl'?>
<ROOT 
 xmlns="http://www.wilfried-grupe.de" 
 vorname="Resi" 
 name="Denzschlos">
 <hi>Hallo Leute von heute &amp; morgen</hi>
 <lfdnr><![CDATA[1]]></lfdnr>
 <lfdnr><![CDATA[2]]></lfdnr>
 <lfdnr><![CDATA[3]]></lfdnr>
 <lfdnr><![CDATA[4]]></lfdnr>
</ROOT>

Mit StAX ein XML Dokument lesen

Die komplexere Event-basierte Programmierung finden wir im Beispiel "XMLEventReader".


 try {
   // zuerst eine neue XMLInputFactory erstellen
   XMLInputFactory inputFactory = XMLInputFactory.newInstance();
   // einen neuen eventReader einrichten
   InputStream in = new FileInputStream(filename);
   XMLEventReader eventReader = inputFactory.createXMLEventReader(in);
   // das XML-Dokument lesen
   while (eventReader.hasNext()) {
    XMLEvent event = eventReader.nextEvent();
    if (event.isStartElement()) {
     if (event.asStartElement().getName().getLocalPart() == ("Ort")) {
      event = eventReader.nextEvent();      
      System.out.println("[Ort]" );
      continue;
     }
     if (event.asStartElement().getName().getLocalPart() == ("Mensch")) {
      event = eventReader.nextEvent();
      System.out.println("[Mensch]");      
      continue;
     }
     if (event.asStartElement().getName().getLocalPart() == ("id")) {
      event = eventReader.nextEvent();
      System.out.println("id: " + event.asCharacters().getData());
      continue;
     }
     if (event.asStartElement().getName().getLocalPart() == ("name")) {
      event = eventReader.nextEvent();
      System.out.println("name: " + event.asCharacters().getData());
      continue;
     }
     if (event.asStartElement().getName().getLocalPart() == ("vorname")) {
      event = eventReader.nextEvent();
      System.out.println("vorname: " + event.asCharacters().getData());
      continue;
     }
//     if (event.asStartElement().getName().getLocalPart() == ("bez")) {
//      event = eventReader.nextEvent();
//      System.out.println("bez:" + event.asCharacters().getData());
//      continue;
//     }
    }
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (XMLStreamException e) {
   e.printStackTrace();
  }

wg / 6. Januar 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/StAX.html