# jdom, xml & namespace problem



## BlaBlupp (31. März 2008)

Hallo zusammen,

ich brauche folgenden Header in meiner xml-Datei: 


```
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns 
     http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
```

Ich arbeite mit jdom und bekomme es auch hin, nur leider steht dann bei den Elementen immer folgendes:

```
<key xmlns="" id="d0" for="node" />
```
(das xmlns ist zu viel, das sollte da nicht stehen)
daher glaub ich dass ich irgendwas mit dem namespace und dem attribut falsch gemacht hab 
Hier mal den Code dafür:


```
Namespace xmlns = Namespace.getNamespace("http://graphml.graphdrawing.org/xmlns");
        Element elRoot = new Element("graphml",xmlns);
        Document doc = new Document(elRoot);

         Namespace xsi = Namespace.getNamespace("xsi", 
        "http://www.w3.org/2001/XMLSchema-instance");
         elRoot.addNamespaceDeclaration(xsi);

        Attribute attSchema = new Attribute("schemaLocation",
                                  "http://graphml.graphdrawing.org/xmlns" +
                                  " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd",
                                   xsi);
        elRoot.setAttribute(attSchema);
```

Jemand ne Idee wie ich das richtig mache? Bin momentan etwas ratlos ... 
Danke

Gruß 
BlaBlupp


----------



## Joe1184 (2. September 2009)

Hallo,

da auf dieses Problem niemand geantwortet hat, poste ich hier mal die Lösung, falls in Zukunft jemand dasselbe Problem hat und auch wie ich über google auf diesen Thread stößt.

Du musst, wenn du das Element "key" erzeugst, ihm auch den Default-Namespace zuweisen. In deinem Fall xmlns. Hier als Java-Quellcode:


```
Element key = new Element("key", xmlns);
```

Das musst du bei allen Kindelementen die du erzeugst machen, somit erben sie den Default-Namespace vom root-Element und dein XML-Dokument wird ohne das leere xmlns="" erzeugt.
In deinem Fall steht dann nur noch:


```
<key id="d0" for="node" />
```

Gruß
Joe


----------

