blob: bcbe4d487bd9f90371150df56a79247aa38fc6a6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.ws.internal.explorer.platform.util;
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.parsers.*;
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 java.io.*;
public final class XMLUtils
{
/**
* Serialize an XML Element into a String.
* @param e Element to be serialized.
* @param omitXMLDeclaration boolean representing whether or not to omit the XML declaration.
* @return String representation of the XML document fragment.
*/
public static final String serialize(Element e,boolean omitXMLDeclaration)
{
if (e != null)
{
try
{
DOMSource domSource = new DOMSource(e);
Transformer serializer = TransformerFactory.newInstance().newTransformer();
serializer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, ((omitXMLDeclaration) ? "yes" : "no"));
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
serializer.setOutputProperty(OutputKeys.ENCODING, HTMLUtils.UTF8_ENCODING);
serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
serializer.transform(domSource, new StreamResult(baos));
baos.close();
return new String(baos.toByteArray(), HTMLUtils.UTF8_ENCODING);
}
catch (Throwable t)
{
}
}
return null;
}
/**
* Serialize an XML Element into a String.
* @param df DocumentFragment to be serialized.
* @param omitXMLDeclaration boolean representing whether or not to omit the XML declaration.
* @return String representation of the XML document fragment.
*/
public static final String serialize(DocumentFragment df,boolean omitXMLDeclaration)
{
if (df != null)
{
try
{
DOMSource domSource = new DOMSource(df);
Transformer serializer = TransformerFactory.newInstance().newTransformer();
serializer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, ((omitXMLDeclaration) ? "yes" : "no"));
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
serializer.setOutputProperty(OutputKeys.ENCODING, HTMLUtils.UTF8_ENCODING);
serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
serializer.transform(domSource, new StreamResult(baos));
baos.close();
return new String(baos.toByteArray(), HTMLUtils.UTF8_ENCODING);
}
catch (Throwable t)
{
}
}
return null;
}
/**
* Create a new XML Document.
* @param docBuilder DocumentBuilder. Setting this to null will create a new DocumentBuilder.
* @return Document
*/
public static final Document createNewDocument(DocumentBuilder docBuilder) throws ParserConfigurationException
{
if (docBuilder == null)
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);
docBuilder = factory.newDocumentBuilder();
}
Document doc = docBuilder.newDocument();
return doc;
}
/**
* Convert the String representation of an Element into an Element
* @param String representation of an Element.
* @return Element
*/
public static Element stringToElement(String s) throws ParserConfigurationException, SAXException, UnsupportedEncodingException, IOException {
return stringToElement(s, false);
}
/**
* Convert the String representation of an Element into an Element
* @param String representation of an Element.
* @param boolean set whether the return Element should be namespace aware.
* @return Element
*/
public static Element stringToElement(String s, boolean namespaceAware) throws ParserConfigurationException, SAXException, UnsupportedEncodingException, IOException
{
return byteArrayToElement(s.getBytes(HTMLUtils.UTF8_ENCODING), namespaceAware);
}
/**
* Convert the byte array representation of an Element into an Element
* @param byte[] representation of an Element.
* @param boolean set whether the return Element should be namespace aware.
* @return Element
*/
public static Element byteArrayToElement(byte[] b, boolean namespaceAware) throws ParserConfigurationException, SAXException, UnsupportedEncodingException, IOException
{
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
docBuilderFactory.setNamespaceAware(namespaceAware);
docBuilderFactory.setValidating(false);
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(new ByteArrayInputStream(b));
return doc.getDocumentElement();
}
}