Objekt-Serialisierung mit C#.NET / 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 Sie 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 / 3. April 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf.






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