2017-01-08 13 views
-1

Ich möchte flexiField-Tags generieren und sie der aktuellen XML-Datei hinzufügen.Wie füge ich einen neuen Knoten unter einem bestimmten Knoten in JDOM hinzu JAVA

Hier ist meine xmlFile.

<com.model.FlexiFieldList> 
    <flexiFields> 
     <flexiField> 
     <fieldDesc>BL</fieldDesc> 
     <fieldName>BL</fieldName> 
     <fieldType>FREE_TEXT</fieldType> 
     <fieldTypeDataStr/> 
     <sensitive>false</sensitive> 
     <value>True</value> 
     <valueType>String</valueType> 
     </flexiField> 
    </flexiFields> 
</com.model.FlexiFieldList> 

möchte ich neue flexiField hinzuzufügen, und ich habe diese Java-Code, aber wenn ich meinen Code ausführen, fügt er flexiField Knoten unter <com.model.FlexiFieldList> Element

Ich weiß, dass in Element root = document.getDocumentElement(); Teil zeigen wir, dass wir neue hinzufügen, werden Knoten zum Stammverzeichnis, aber ich konnte nicht jeden Weg finden, um es zu ändern

Meine Frage Eigentlich ist das, wie kann ich root-Pfad so ändern, wenn ich root.appendChild(newFlexiField); laufen wird es neue flexiField Knoten unter flexiFields Knoten hinzufügen

File file = new File("C:/Users/xxx/Desktop/ff.xml"); 
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
    Document document = documentBuilder.parse(file); 
    Element root = document.getDocumentElement(); 
    Collection<FlexiField> flexiFields = new ArrayList<FlexiField>(); 
    flexiFields.add(new FlexiField()); 

    for (FlexiField flexiField : flexiFields) { 
     // server elements 
     Element newFlexiField = document.createElement("flexiField"); 

     Element name = document.createElement("fieldDesc"); 
     name.appendChild(document.createTextNode(flexiField.fieldDesc())); 
     newFlexiField.appendChild(name); 

     Element port = document.createElement("fieldName"); 
     port.appendChild(document.createTextNode(flexiField.fieldName())); 
     newFlexiField.appendChild(port); 


     root.appendChild(newFlexiField); 

    } 

    DOMSource source = new DOMSource(document); 

    TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
    Transformer transformer = transformerFactory.newTransformer(); 
    StreamResult result = new StreamResult(file); 
    transformer.transform(source, result); 
+0

Sie die Frage DOM4J mit Tags versehen haben, und Sie haben JDOM in der Frage erwähnt, aber Ihr Code scheint benutze einfach altes DOM. Welches ist es? –

Antwort

0

Sie Assumming haben nur ein <flexiFields> Element in XML-Datei, die Sie dies versuchen:

File file = new File("C:/Users/xxx/Desktop/ff.xml"); 
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
    Document document = documentBuilder.parse(file); 
    Element root = document.getDocumentElement(); 

    // to print your root element 
    System.out.println("\n*************root************"); 
    System.out.println(root.getNodeName()); 

    // to find the flexiFields 
    Node firstChild=root.getFirstChild(); 

    while (firstChild != null && firstChild.getNodeType() != Node.ELEMENT_NODE) 
    { 
     firstChild = firstChild.getNextSibling(); 
    } 

    System.out.println(firstChild.getNodeName()); 


    Collection<FlexiField> flexiFields = new ArrayList<FlexiField>(); 
    flexiFields.add(new FlexiField()); 

    for (FlexiField flexiField : flexiFields) { 
     // server elements 
     Element newFlexiField = document.createElement("flexiField"); 

     Element name = document.createElement("fieldDesc"); 
     name.appendChild(document.createTextNode(flexiField.fieldDesc())); 
     newFlexiField.appendChild(name); 

     Element port = document.createElement("fieldName"); 
     port.appendChild(document.createTextNode(flexiField.fieldName())); 

     // append your child 
     newFlexiField.appendChild(port); 


     firstChild.appendChild(newFlexiField); 

    } 

    DOMSource source = new DOMSource(document); 

    TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
    Transformer transformer = transformerFactory.newTransformer(); 
    StreamResult result = new StreamResult(file); 
    transformer.transform(source, result); 
Verwandte Themen