STAX, Problem: xml-Datei schreiben

schlumsch

Mitglied
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
 
Zurück