# XML formatieren



## klaus dieter (17. Jan 2004)

Hallo zusammen,

ich bin gerade dabei ein Prograrmm zuschreiben, das eine XML Datei einliest und nach bedarf ein Element hinzufügt und die Datei wieder ausgibt.
Dabei habe ich nur das Problem, dass das neu eingefügte Element nicht richtig in die Formatierung eingesetzt wird.

Hier mal die Quelldatei:


```
<?xml version="1.0" encoding="UTF-8"?>
<klausurliste>
  <student>
    <vorname>thomas</vorname>
    <nachname>meier</nachname>
    <matrikel>177777</matrikel>
    <lvnr>1020</lvnr>
  </student>
  <student>
    <vorname>michael</vorname>
    <nachname>mueller</nachname>
    <matrikel>177581</matrikel>
    <lvnr>1020</lvnr>
  </student>
</klausurliste>
```

hier die ausgegebene Datei:


```
<?xml version="1.0" encoding="UTF-8"?>
<klausurliste>
  <student>
    <vorname>steffen</vorname>
    <nachname>scherf</nachname>
    <note>1</note><matrikel>177580</matrikel>
    <lvnr>1020</lvnr>
  </student>
  <student>
    <vorname>michael</vorname>
    <nachname>mueller</nachname>
    <matrikel>177581</matrikel>
    <lvnr>1020</lvnr>
  </student>
</klausurliste>
```

Das Problem ist, dass das Notenelement vor das Element mit der Matrikel-Nr gesetzt wird.

Hier mal der Quellcode der das Einfügen realisiert:


```
nodeChild = ndListChilds.item(j);
  newChildNode = document.createElement("note");
  Text newTextNode = document.createTextNode("1");
  newChildNode.appendChild(newTextNode);
  nodeMain.insertBefore(newChildNode, nodeChild);
  nodeMain.normalize();
```

ist es irgendwie möglich, dass das Notenelement so eingefügt wird, dass das Matrikelelement in einer neuen Zeile beginnt???

Danke für die Hilfe...


----------



## René Link (18. Jan 2004)

Hi,

das was du suchst geht mit xerces von der apache.org.
http://xml.apache.org/xerces-j/index.html

Folgende Imports brauchst du

```
import org.apache.xml.serialize.*;
import org.w3c.dom.*;
import java.io.*;
```

Dann kannst du dir zum Beispiel so eine Methode schreiben.

```
public static String createXMLFormattedString(Node root){
    if(root == null)
        return null;

    StringWriter sw = new  StringWriter();
    OutputFormat format = new OutputFormat();

    format.setIndenting(true);
    format.setIndent(6);

    XMLSerializer serObj = new XMLSerializer(sw, format);

    try{
        Document doc = root.getOwnerDocument();
        serObj.serialize(doc);
        return sw.toString();
    } catch (Exception e) {
        return null;
    }
}
```

Über das OutputFormat kannst du einstellen, wie dein XML ausgegeben werden soll.
Weiteres entnimm bitte der Javadoc.


----------



## Guest (6. Jan 2005)

http://www.java-forum.org/de/viewtopic.php?p=68277#68277


----------

