Sunteți pe pagina 1din 3

package dk.applicon.tns.sdn.

jaxp;

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.OutputStream; import java.util.Map;

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

import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList;

import com.sap.aii.mapping.api.StreamTransformation; import com.sap.aii.mapping.api.StreamTransformationException;

/** * @author Thorsten Nordholm Sbirk

*/ public class JavaMappingDOM implements StreamTransformation {

public void setParameter(Map arg0) { }

public void execute(InputStream inputStream, OutputStream outputStream) throws StreamTransformationException {

try { // create a DOM parser DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder();

// parse input to create document tree Document doc = builder.parse(inputStream);

// transform the tree Node orders = doc.getFirstChild(); // gets the root element

NodeList children = orders.getChildNodes(); // gets children of the root Node lastHeader = null; for (int item = 0; item < children.getLength(); item++) { Node node = children.item(item); if ("Header".equals(node.getNodeName())) { lastHeader = node; // store reference to last Header node

} else if ("Line".equals(node.getNodeName())) { orders.removeChild(node); lastHeader.appendChild(node); } } // remove Line node from root // add Line node to last Header

// create transformer for producing XML output TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes");

// create source and result wrappers and perform transformation DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(outputStream); transformer.transform(source, result); } catch (Exception e) { throw new StreamTransformationException("Mapping failed", e); } }

S-ar putea să vă placă și