Java STAX, Problem: xml-Datei schreiben

schlumsch

Cadet 4th Year
Registriert
Feb. 2008
Beiträge
73
Hallo allerseits. ich versuche in java mit Stax eine xml-Datei zu schreiben. Das funktioniert auch wunderbar nur habe ich ein Problem. Mein Code erzeugt ein Startelement "relation" und fügt dieser in der nachfolgenden Schleife diverse Attribute hinzu. An dem Punkt wo currentColumnNameIndex >= (columnNames.size()-1) beendet er meine Relation, schreibt eine neue Relation und beginnt die nächste Schleifeniteration.


Code:
      xmlw.writeStartDocument();
                
                xmlw.writeCharacters("\n");             
                xmlw.writeStartElement("dbContent");
                xmlw.writeCharacters("\n");
                // erste Relation
                xmlw.writeStartElement("relation");
                xmlw.writeCharacters("\n");
                int currentColumnNameIndex = 0;     
                boolean isEndOfRelation = true;
                for (int currentDataFieldIndex = 1; currentDataFieldIndex < dataVector.size(); currentDataFieldIndex = currentDataFieldIndex + 2) {         
                    // Relation-ID erhoehen wenn eine Relation zuvor abgearbeitet wurde
                    if (isEndOfRelation) {
                        isEndOfRelation = false;
                        String iString = abnormalizer.intToString(currentRow);
 
                        xmlw.writeAttribute("id", iString);
                        xmlw.writeCharacters("\n");                     
                    }
                    // Column-name:
                    String colName = columnNames.get(currentColumnNameIndex);
                    // Column-Content:
                    String colContent = dataVector.get(currentDataFieldIndex);
                    String newColContent = terminateStupidChars(colContent);
                    xmlw.writeCharacters("    ");
                    xmlw.writeStartElement(colName);
                    xmlw.writeCharacters(newColContent);
                    xmlw.writeEndElement();
                    xmlw.writeCharacters("\n");
                    // id nach durchlauf aller Datensätze einer relation ++
                    if (currentColumnNameIndex >= (columnNames.size()-1)) {
                        isEndOfRelation = true;
                        currentColumnNameIndex = 0;
                        currentRow++;
                        xmlw.writeEndElement();
                        xmlw.writeCharacters("\n");
                        if (currentDataFieldIndex+1 < dataVector.size()) {
                            //letzter Datensatz noch nicht erreicht
                            xmlw.writeStartElement("relation"); 
                        }
                                        
                    } else {
                        currentColumnNameIndex++;   
                    }

Das ganze funktioniert wunderbar wenn ich meinen boolean isEndOfRelation vor der Schleife auf false setze. Da dann aber die relation 0 keine id bekommt setze ich den boolean auf true und bekomme an der Stelle xmlw.writeAttribute("id", iString);
folgende Exception
"javax.xml.stream.XMLStreamException: Attribute not associated with any element
at com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.writeAttribute(Unknown Source)"


Sieht da jemand meinen Fehler? Ich muss doch nicht etwa Startelemente innerhalb einer Schleife erstellen um in der Schleife darauf zugreifen zu können, oder etwa doch?

Wäre dankbar für euere hilfe,

thx & lg
 
könnte mir Vorstellen das er mit xmlw.writeCharacters("\n"); nicht zurecht kommt bzw. nicht in der Reihenfolge xmlw.writeStartElement("relation"); xmlw.writeCharacters("\n"); xmlw.writeAttribute("id", iString); da ein Attribut innerhalb des Start Tags definiert wird. Ansonsten würde es evtl helfen wenn du mal den gewünschten xml Ouput postest.

/edit: kommentier einfach mal jegliche Aufrufe aus die rein der Formatierung dienen, wie z.B. xmlW.writeCharacters("\n");
 
Zuletzt bearbeitet:
Zurück
Oben