Java XML Schnittstelle

Hi,

nein, XMLBeans benötigt mindestens jdk 1.5, weil es mit Annotations läuft. ein jdk1.6 ist problemlos.

Die Vermeidung von externen Bibliotheken muss man über am zu erwartenden Mehraufwand festmachen.

Man kann sogar seine Konsolenausgabe in XML in eine Datei streamen. Damit verzichtet man aber komplett auf Typensicherheit auf XML-Seite. Besser finde ich da schon den Vorschlag mit dem DocumentBuilder.

Der Charme von JAXB/XMLBeans ist, dass man sich ums XML oder über DOM-Nodes überhaupt net mehr kümmern muss, weil das von der Library abgefackelt wird.

Grüße
gore
 
ist deine Konsolenausgabe bereits im XML Format ? ---->> Nein!

---------------------------

Bei einer anderen aufgabe sollte ich eine CSV Datei erstellen . Das war einfach mit einem Writer. Nur mit XML habe ich garkeine erfahrung!

also eine XML datei habe ich schon hinbekommen mit jaxb.
Ich habe bei den anderen aufgaben immer ohne objecten gearbeitet(muss ich mit objecten arbeiten?). Wie ich aber jetzt bei jaxb sehe werden die ergebnise von den objecten in die xml geleitet!?
Ich möchte also mit Artikeln anfangen und jeweils immer die Artikel z.B. Artikel1, Artikel2, ... in Artikeln drin haben.

Was ich bisher hinbekommen habe:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Artikeln>
<datum>88</datum>
<ean>1245</ean>
<abgeaufen>88</abgeaufen>
</Artikeln>

Würde besser aussehen:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Artikeln>
<Artikel1>
<datum>88</datum>
<ean>1245</ean>
<abgeaufen>88</abgeaufen>
</Artikel1>
</Artikeln>

Vielen Dank für eure Hilfestellung!
 
Dazu müsstest Du afaik eine Klasse Artikeln haben die eine Collection oder Array von Artikel hat.

[edit]
so geht das gar nicht.

was geht ist :

XML:
<Artikeln>
 <Artikel>
   <id>1</id>
   ....
 </Artikel>
 <Artikel>
   <id>2</id>
   ....
 </Artikel>
</Artikeln>
 
Zuletzt bearbeitet von einem Moderator:
ich muss sql abfragen ... also ergebnisse von sql abfragen in eine xml datei schreiben.

ich soll für jeden Artikel mehrere sachen abfragen und dann in die xml datei schreiben z.B.:

<Artikeln>
<Artikel>
<id>1</id>
<...>...</...>
<...>...</...>
<...>...</...>
<...>...</...>
</Artikel>
<Artikel>
<id>2</id>
<...>...</...>
<...>...</...>
<...>...</...>
<...>...</...>
</Artikel>
</Artikeln>

ich habe auch eine ausgabe hinbekommen, aber wie mache ich das mit allen artikeln****? also eine klasse erstellen habe ich verstanden...und dann?

vielen vielen dank
 
naja,

Du baust eine Klasse mit den von Dir benötigten Attributen und annotierst diese; soweit ich Dich verstanden habe, hast Du das auch schon gemacht.

Was Du noch brauchst ist eine annotierte Klasse Artikeln, die ein Array Artikel[] hat.

Dieses Artikelarray füllst Du, indem Du einfach für jede Artikeldatenzeile, die Dein SQL liefert, eine Instanz von Artikel machst und selbige dann mit den Werten befüllst. Zum Schluss hängst Du die an das Arrays an.

Dann musst Du die Instanz von Artikeln nur noch in XML serialisieren und fertig; also das was Du oben bereits erwähnt hast.

Grüße
gore
 
naja,

Du baust eine Klasse mit den von Dir benötigten Attributen und annotierst diese; soweit ich Dich verstanden habe, hast Du das auch schon gemacht.

die attribute habe ich geschrieben aber nicht die annotationen.

Was Du noch brauchst ist eine annotierte Klasse Artikeln, die ein Array Artikel[] hat.

@XmlRootElement meinst du das?

Dieses Artikelarray füllst Du, indem Du einfach für jede Artikeldatenzeile, die Dein SQL liefert, eine Instanz von Artikel machst und selbige dann mit den Werten befüllst. Zum Schluss hängst Du die an das Arrays an.
die artikelids aus er datenbank herauslesen und dann in das array schreiben richtig?

Dann musst Du die Instanz von Artikeln nur noch in XML serialisieren und fertig; also das was Du oben bereits erwähnt hast.
serialisieren? wie ?

danke dir gorefest
 
ungefähr so :

Java:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"artikel"
})
@XmlRootElement(name = "artikeln")
public class Artikeln { 
   @XmlElement(name = "artikel")
   public List<Artikel> artikel= new ArrayList<Artikel>(); 
    .....
}

sowie

Java:
  public static class Artikel {
  @XmlElement(name = "id")
     public Long id;

Diese Objekte erzeugst Du beim iterieren über Dein resultset und packst sie dann in die Artikeln-artikel-Collection.

Also irgendwas in der art

Java:
Artikeln n = new Artikeln();
 for (Object[] o : qry.DeineZeilen()) {
  Artikel x = new Artikel();
 x.id = (Long) o[ID_COL]; 
 ....
 n.getArtikel().add(x);
}

Das was dabei rauskommt, schickst Du dann an Deinen XML-Schreiber.

Grüße
gore
 
Zuletzt bearbeitet:
vielleicht eine blöde frage...aber: muss man mit objecten arbeiten.
Ich bekomme die Strings von der Datenbank. Theoretisch könnte ich dich gleich doch reinschreiben in die Datei. Würden dann die Annot. nicht erkannt werden!?
 
Also,
Annotations werden von JaxB erkannt und dazu verwendet, um Objekte in XML zu packen (=marshalling).

Du kannst natürlich auch das XML direkt aus den Strings erzeugen. Dann kannst Du Dich aber auch um Quotierung etc pp kümmern. Du brauchst dann weder Klassen noch JAXB.

Allerdings ist ein Artikelpreis wohl kaum ein string ;-)

Der Vorteil von JAXB ist, dass Du etwas typsicher in XML und bei Bedarf auch wieder zurückbringst.

Grüße
gore
 
Schritt 1 : Daten selektieren und Collection erzeugen

Java:
   Artikeln alleArtikel = new Artikeln();
   Statement s = conn.createStatement ();
   s.executeQuery ("SELECT id, name, preis FROM artikel");
   ResultSet rs = s.getResultSet ();
   while (rs.next ())
   {  
      Artikeln art = new Artikeln();
      art.setId(rs.getId(1));
      art.setName(rs.getString(2));
      ....
      // den fertig aufgebauten Artikel kleben wir an Artikeln
     alleArtikel.add(art);
    }
}

Damit hast Du ein Objekt Artikeln erzeugt, dass eine Liste aller Artikel enthält. Diese Artikel wurden in der Schleife erzeugt.

Schritt 2: Objekte in XML Datei schreiben:

Java:
JAXBContext context = JAXBContext.newInstance( Artikeln.class ); 
Marshaller m = context.createMarshaller(); 
m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE ); 
m.marshal( club, System.out );
Writer w = null; 
try { 
  w = new FileWriter( "alleArtikel.xml" ); 
  m.marshal( alleArtikel, w ); 
} 
finally { 
  try { w.close(); } catch ( Exception e ) { } 
}

ist ungetestet, geht aber. Ich empfehle Dir, mal hier einen Blick drauf zu werfen :

http://openbook.galileocomputing.de/javainsel8/javainsel_15_008.htm

sowie fürt SQL+java hier

http://openbook.galileocomputing.de...23_006.htm#mjd946cabe2b84a19aa815b0b2c42ce9da

Grüße
gore
 
Zurück