0

I am having xml file called temp.xml with the below content.

<?xml version="1.0" encoding="UTF-8" standalone="no"?><combinedstaff>
<staff><firstname>added firstname</firstname><lastname>added lastname</lastname><nickname>added nickname</nickname><salary>$10,000</salary></staff></combinedstaff>

I am having xml string this way,

String sampleXML="<staff><firstname>fff</firstname><lastname>lll</lastname><nickname>nnn</nickname><salary>$20,000</salary></staff>";

I need to append this xml string to the above xml file, so that final xml should look this way,

<?xml version="1.0" encoding="UTF-8" standalone="no"?><combinedstaff>
<staff><firstname>added firstname</firstname><lastname>added lastname</lastname><nickname>added nickname</nickname><salary>$10,000</salary></staff>
<staff><firstname>fff</firstname><lastname>lll</lastname><nickname>nnn</nickname><salary>$20,000</salary></staff>
</combinedstaff>

I have coded this way, But I am getting some junk characters like ;&lt; are added to the xml string this way,

<?xml version="1.0" encoding="UTF-8" standalone="no"?><combinedstaff>
<staff><firstname>added firstname</firstname><lastname>added lastname</lastname><nickname>added nickname</nickname><salary>$10,000</salary></staff><staff>&lt;staff&gt;&lt;firstname&gt;added firstname&lt;/firstname&gt;&lt;lastname&gt;added lastname&lt;/lastname&gt;&lt;nickname&gt;added nickname&lt;/nickname&gt;&lt;salary&gt;$10,000&lt;/salary&gt;&lt;/staff&gt;</staff><staff>&lt;staff&gt;&lt;firstname&gt;added firstname&lt;/firstname&gt;&lt;lastname&gt;added lastname&lt;/lastname&gt;&lt;nickname&gt;added nickname&lt;/nickname&gt;&lt;salary&gt;$10,000&lt;/salary&gt;&lt;/staff&gt;</staff><staff>&lt;staff&gt;&lt;firstname&gt;added firstname&lt;/firstname&gt;&lt;lastname&gt;added lastname&lt;/lastname&gt;&lt;nickname&gt;added nickname&lt;/nickname&gt;&lt;salary&gt;$10,000&lt;/salary&gt;&lt;/staff&gt;</staff></combinedstaff>

Here is my code,

public class writexml1 {

    public static void main (String args[]) 
    {

        File docFile = new File(".xml");

        Document doc = null;
        try 
        {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            doc = db.parse(docFile);
        } 
        catch (java.io.IOException e) 
        {
            System.out.println("Can't find the file");
        } 
        catch (Exception e) 
        {
            System.out.print("Problem parsing the file.");
        }

        Element root = doc.getDocumentElement();

        System.out.println("The root element is " + root.getNodeName() + ".\n");

        NodeList children = root.getChildNodes();
        System.out.print("There are "+children.getLength()+" child elements.\n");
        System.out.print("They are: \n");


        Element staffElement = doc.createElement("staff");

        Node updateText = doc.createTextNode("<firstname>added firstname</firstname><lastname>added lastname</lastname><nickname>added nickname</nickname><salary>$10,000</salary></staff>");
        staffElement.appendChild(updateText);

        root.appendChild(staffElement);

        try{
            String outputURL = "temp.xml";

            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new FileOutputStream(outputURL));

            TransformerFactory transFactory = TransformerFactory.newInstance();
            Transformer transformer = transFactory.newTransformer();

            transformer.transform(source, result);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

How can i solve this issue? Where is the issue ?

Can someone help?

1
  • 2
    This question is too long and to generic - please try isolating the problem a bit more or consider moving it to: codereview.stackexchange.com Commented Nov 6, 2015 at 11:10

2 Answers 2

2

Dont add your nested elements as text.

The line:

Node updateText = doc.createTextNode("<firstname>added firstname</firstname><lastname>added lastname</lastname><nickname>added nickname</nickname><salary>$10,000</salary></staff>");

What you want to do is pare this string as the XML it is and then append it to the the combinedstaff-element.

Take a peek at the accepted answer here on how to create XML from a string: How to create a XML object from String in Java?

And apply that solution on your xml-string:

"<staff><firstname>added firstname</firstname><lastname>added lastname</lastname><nickname>added nickname</nickname><salary>$10,000</salary></staff>"

Afterwards you take the resulting document and add it to you original XML. By doing something like this:

Node newNode =  doc.importNode(theNewDocument.getDocumentElement() , true); //Need to import prior to appending it

doc.getDocumentElement().appendChild(newNode);  

Its a much better solution to use the DOM to append content rather than trying to do it manully.

Sign up to request clarification or add additional context in comments.

Comments

0

Try out using

 TransformerFactory transFactory = TransformerFactory.newInstance();
 Transformer transformer = transFactory.newTransformer();
 transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
 transformer.transform(source, result);

1 Comment

Is there any other way to get the correct xml into file?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.