Few Nodes are missing in the XML after update/append process

Viewed 15

I want to Update a xml, want to take few nodes in middle at trn node and place them in root node and i want keep the trn node child remain same. But the child nodes in trn node are roved in end result. I am not sure what wrong i am doing. I have below xml like structure

<xyz>
<root>
  <content>
     <trn>
      <a> ...
      </a>
      <b> ...
      </b>
     </trn>
  </content>
</root>
</xyz>

Want to modify like below xml

<xyz>
<root>
  <content>
     <trn>
      <a> ...
      </a>
      <b> ...
      </b>
     </trn>
  </content>
</root>
<newNode>
    <a> ...
    </a>
    <b> ...
    </b>
</newNode>
</xyz>

But the output XML is as below

<xyz>
<root>
  <content>
     <trn>
      
     </trn>
  </content>
</root>
<newNode>
    <a> ...
    </a>
    <b> ...
    </b>
</newNode>
</xyz>

Below is my code. anything i am missing?

import java.io.ByteArrayInputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.springframework.stereotype.Service;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;


public class Service {

    private static final String XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<xyz>\r\n"
            + "    <root>\r\n"
            + "      <content>\r\n"
            + "         <trn>\r\n"
            + "          <a> ...\r\n"
            + "          </a>\r\n"
            + "          <b> ...\r\n"
            + "          </b>\r\n"
            + "         </trn>\r\n"
            + "      </content>\r\n"
            + "    </root>\r\n"
            + "    </xyz>";
    
    public void send(String input){
        
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse(new ByteArrayInputStream(XML.getBytes("UTF-8")));
            TransformerFactory tFactory = TransformerFactory.newInstance();
            Transformer tFormer = tFactory.newTransformer();
            Element element = (Element) doc.getElementsByTagName("root").item(0);
            Element formInfo = doc.createElement("newNode");
            NodeList lt = doc.getElementsByTagName("trn");
            Node RequestDetail = null;
            Node ResponseDetail = null;
            for (int i = 0; i < lt.getLength(); i++) {
                // get first staff
                Node t = lt.item(i);
                if (t.getNodeType() == Node.ELEMENT_NODE) {
                    String id = t.getNodeName();
                    if ("trn".equals(id.trim())) {

                            NodeList childNodes = t.getChildNodes();

                            for (int j = 0; j < childNodes.getLength(); j++) {
                                Node item = childNodes.item(j);
                                if (item.getNodeType() == Node.ELEMENT_NODE) {

                                    if ("a".equalsIgnoreCase(item.getNodeName())) {
                                        RequestDetail = item;
                                    } else if ("b".equalsIgnoreCase(item.getNodeName())) {
                                        ResponseDetail = item;
                                    }
                                    }
                            }
                    }
                    }
            }
            //NodeList re = doc.getElementsByTagName("RequestDetail");
            //NodeList p = doc.getElementsByTagName("ResponseDetail");
     
            //Node node1 = re.item(0);
            //Node node2 = p.item(0);
            formInfo.appendChild(RequestDetail);
            formInfo.appendChild(ResponseDetail);
                        
            element.getParentNode().appendChild(formInfo);
            
            doc.normalize();
            Source source = new DOMSource(doc);
            Result dest = new StreamResult(System.out);
            tFormer.transform(source, dest);
        } catch (Exception e) {
            e.printStackTrace();

        }
    }
    
}
0 Answers
Related