Package xmlmerge

Source Code of xmlmerge.XMLTransformer

package xmlmerge;

import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class XMLTransformer {
    private DocumentBuilder dom_builder;
   
    public XMLTransformer() throws ParserConfigurationException {
        DocumentBuilderFactory dom_builder_factory = DocumentBuilderFactory.newInstance();
        dom_builder = dom_builder_factory.newDocumentBuilder();
    }

    private Element getNormalizedDocumentRoot( String filename ) {
        Document document;
        try {
            document = dom_builder.parse( filename );
        }
        catch ( SAXException e ) {
            System.out.printf( "Error: Error encountered during parsing: %s\n", e.getMessage() );
            return dom_builder.newDocument().getDocumentElement();
        }
        catch ( IOException e ) {
            System.out.printf( "Error: an error occoured during the parsing of %s: %s\n", filename, e.getMessage() );
            return dom_builder.newDocument().getDocumentElement();
        }
        document.normalizeDocument();
        return document.getDocumentElement();
    }
   
    public void mergeXMLs( String input_file_name_1, String input_file_name_2, String output_file_name ) {
        //merge the 2 documents together inplace
        Element root_out                    = getNormalizedDocumentRoot( input_file_name_1 );
        Element root_2                      = getNormalizedDocumentRoot( input_file_name_2 );
        NodeList nodes_out                  = root_out.getChildNodes();
        final int original_out_node_count   = nodes_out.getLength();
        while ( root_2.hasChildNodes() ) {
            Node child = root_2.removeChild( root_2.getFirstChild() );
           
            boolean equal_node = false;
            for ( int i=0; i<original_out_node_count; i++ ) {
                if ( nodes_out.item( i ).isEqualNode( child ) ) {
                    equal_node = true;
                    break;
                }
            }
            // don't add duplicates
            if ( equal_node ) continue;
           
            root_out.appendChild( root_out.getOwnerDocument().importNode( child, true ) );
        }
       
        // write DOM into XML
        try {
            Source source = new DOMSource( root_out );
            Transformer tr = TransformerFactory.newInstance().newTransformer();
            tr.transform( source, new StreamResult( new File( output_file_name ) ) );
        }
        catch ( TransformerFactoryConfigurationError | TransformerException e ) {
            System.out.printf( "Error: Error encountered when saving XML %s: %s\n", output_file_name, e.getMessage() );
        }
    }
}
TOP

Related Classes of xmlmerge.XMLTransformer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.