# Probleme mit Namespaces



## Gichin (18. Jun 2008)

Hallo,

beim erzeugen einer xml-Datei mit jdom 1.1 und Namespaces, ergibt sich folgendes Problem


```
<?xml version="1.0" encoding="UTF-8"?>
<shop xmlns="http://www.myCompany.de/XMLSchema/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mycompany.de bl.xsd">
    <computer [b]xmlns=""[/b] name="iBook">
        <Price Price="$500" />
    </computer>
</shop>
```

wie kann ich dieses verhindern?

xmlns=""

Es sollte erst gar nicht zu sehen sein. Benutzt wird folgender java code:


```
public void createXMLFile() throws IOException {
        Element root = new Element("shop");
        root.setNamespace(DEFAULT_NAMESPACE);
        root.getAttributeValue("ddu", XSI_NAMESPACE);
        root.setAttribute("schemaLocation","http://www.mycompany.de bl.xsd",XSI_NAMESPACE);
       
        Element item1 = new Element("computer");
        item1.setAttribute("name", "iBook");

        Element item2 = new Element("Price");
        item2.setAttribute("Price","$500");

        item1.addContent(item2);
        root.addContent(item1);

        XMLOutputter outputter = new XMLOutputter();
        outputter.output(new Document(root), new FileOutputStream("d:/foo2.xml"));
    }
```

Vielleicht kann mir jemand sagen was ich dort falsch mache??


----------



## Kim Stebel (18. Jun 2008)

probier es mal mit setNamespace(null)


----------



## Gichin (18. Jun 2008)

Dann würde doch aber mein defaultnamespace wegfallen?


----------



## Kim Stebel (18. Jun 2008)

ich meinte iterm1.setNamespace(null) und nicht root.setNamespace(null)


----------



## Gichin (18. Jun 2008)

Das ändert leider nichts.


----------



## Gichin (19. Jun 2008)

Änderung war sehr einfach, nur das jedem element der Namespace gesetzt werden muss.


```
private void processElement(Element element) {
        numElements++;
        List kids = element.getChildren();
        Iterator iterator = kids.iterator();
        while (iterator.hasNext()) {
            Element kid = (Element) iterator.next();
            kid.setNamespace(null);
            processElement(kid);
        }
    }
```


----------

