# neue Knoten erstellen ?



## Manuela (30. Aug 2007)

Hallo 
wie kann ich neue Knoten erstellen ???

```
public void werte_aufnehmen(String FILE,String[] elementName,String[] content ){
    try { 
        SAXBuilder builder = new SAXBuilder();
        Document doc = new Document();
        Element rootElement = new Element("root");
        doc.setRootElement(rootElement);
 
       // Hier irgendwas muß wohl gemacht werden aber was ???????

   for (int i = 0; i < elementName.length || i <   content.length; i++) {      
                             Element element = new Element(elementName[i]);
                              element.addContent( content[i]);                          
                              rootElement.addContent(element);       
                   }                                        
             
        	      XMLOutputter out = new XMLOutputter();
		      FileOutputStream fout = new FileOutputStream(FILE);
		      out.output(doc, fout);

    
    } catch (Exception e) {
	  System.out.println(e);
   }
 }
```

Dies ist meine erstellte XML Datei

```
<?xml version="1.0" encoding="UTF-8" ?> 
<root> 
    <a_1>3</a_1>
    <b_1>3</b_1>
    <c_1>11</c_1>
    <d_1>20</d_1>
    <e_1>30</e_1>
    <f_1>40</f_1>  
</root>
```

jetzt will ich aber das die ganze XML noch einen Zusätzlichen Knoten bekommt,  das die XML Datei so ausieht.


```
<?xml version="1.0" encoding="UTF-8" ?> 
<root> 
    <Einstellung>
        <a_1>3</a_1>
        <b_1>3</b_1>
        <c_1>11</c_1>
        <d_1>20</d_1>
        <e_1>30</e_1>
        <f_1>40</f_1>  
    </Einstellung>
    <Verhalten>
        <a_22>34</a_22>
     ...
</root >
```


Danke Manuela


----------



## pik0r (30. Aug 2007)

dazu hätte ich auch interesse=)

meine xml soll so aussehen:

```
<test>
        <name>...</name>
        <config>
                    <version>1.0</version>
        </config>
        <plugins>
                <plugin>
                        <id>1</id>
                        <url>www.helftmir.de</url>
                </plugin>
        </plugins>
</test>
```

danke


----------



## mikachu (30. Aug 2007)

wenn gewähleistet ist, dass immer genausoviele elementNames und contents in ein sub-element reinkommen, könnte man folgendes mal testen


```
public void werte_aufnehmen(String FILE,String[] elementName,String[] content )
{
    try
    { 
        SAXBuilder builder = new SAXBuilder(); 
        Document doc = new Document(); 
        Element rootElement = new Element("root"); 
        doc.setRootElement(rootElement); 

        // Hier irgendwas muß wohl gemacht werden aber was ??????? 

        Element sub;
        for (int i = 0; i < elementName.length || i <   content.length; i++)
        {
             if( i % 6 == 0 ) // bezieht sich nur auf dein beispiel mit 6 elementen in einer sub-kategorie
             {
                 sub = new Element( "sub" );
             }
             Element element = new Element(elementName[i]); 
             element.addContent( content[i]);                          
             sub.addContent(element);
             if( i % 6 == 5 )
             {
                 rootElement.addContent( sub );
             }
        }
        XMLOutputter out = new XMLOutputter(); 
        FileOutputStream fout = new FileOutputStream(FILE); 
        out.output(doc, fout); 
    }
    catch (Exception e)
   { 
     System.out.println(e); 
   } 
}
```


#not tested#

#edit 1:
mögliches ergebnis:

```
<?xml version="1.0" encoding="UTF-8" ?> 
<root> 
    <sub> 
        <a_1>3</a_1> 
        <b_1>3</b_1> 
        <c_1>11</c_1> 
        <d_1>20</d_1> 
        <e_1>30</e_1> 
        <f_1>40</f_1>  
    </sub> 
    <sub> 
        <a_22>34</a_22> 
     ... 
</root >
```


----------



## Manuela (30. Aug 2007)

Hallo,
das proble ist das es verschiedene Anzahlen von werten gibt 
dann geht das mit deinem Beispiel nicht.

Danke


----------



## mikachu (30. Aug 2007)

dann musst du irgendwie ermitteln, wann denn ein neues sub-element erstellt werden soll...


#edit 1: aber die beiden string-arrays, die du übergibst, sind gleichgroß ?!?

#edit 2: oder kriegt man anhand der element-namens-nummerierung heraus, dass es sich um eine andere gruppe handelt ??? weil dann wär es noch einfacher 


```
Element sub = new Element( "sub" );
String oldElName = "_"; 
for (int i = 0; i < elementName.length || i <   content.length; i++) 
{
    String elName = elementName[i];
    Element element = new Element(elName); 
    element.addContent( content[i]);                          
    sub.addContent(element); 

    if( !elName.split( "_" )[1].equals(oldElName.split( "_" )[1] ) && i > 0 )
    { 
        rootElement.addContent( sub );
        sub = new Element( "sub" );
    } 

    oldElName = elName;
}
```

#edit 3:
also ist die anzahl der elementnamen nicht gleich der anzahl der werte ?!?


----------



## pik0r (5. Sep 2007)

hallo, 

habe da ein andere hoffe "simple" Frage 

also ich hab folgenden Baum:


```
<root>
    <test>
        <version>1.0.0</version>
    </test>
</root>
```

jetzt möchte ich  das immer wenn der Node "test" da ist, soll ein node davor kommen "testbegin"

also so:


```
<root>
    <testbegin>
    <test>
        <version>1.0.0</version>
    </test>
    </testbegin>
</root>
```

über eure hilfe wäre ich echt dankbar !!


----------



## Faruun (5. Sep 2007)

So?


```
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

public class ElementHinzu {

private static void newChild(String newElementName) throws JDOMException, IOException{
		
		SAXBuilder builder = new SAXBuilder();
		Document doc = builder.build("c:/test/element.xml");
		Element root = doc.getRootElement();
	
		// neues Element hinzu
		
		Element newElement = new Element(newElementName);
		Element save = (Element) root.getChild("test").clone();
		root.removeContent();
		root.addContent(newElement);
		newElement.setContent(save);
		
		System.out.println(doc);
		
		FileWriter ausgabestrom = new FileWriter("c:/test/new_test.xml");
        XMLOutputter out = new XMLOutputter();
        out.output(doc, ausgabestrom);

	}
	
	public static void main(String[] args) throws JDOMException, IOException {
		newChild("testbegin");
	}
	
}
```

Gruß,
Faruun


----------

