package javaxt.xml;
import java.io.ByteArrayOutputStream;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.w3c.dom.*;
import javax.xml.parsers.*;
//imports used to transform xml
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
//******************************************************************************
//** DOM Utilities
//******************************************************************************
/**
* Provides basic utilities to simplify loading and parsing xml
*
******************************************************************************/
public class DOM {
//**************************************************************************
//** Private Constructor
//**************************************************************************
/** Defeats Instantiation */
private DOM() {
}
//**************************************************************************
//** createDocument
//**************************************************************************
/** Used to create a DOM document from a URL. */
public static Document createDocument(java.net.URL url){
return new javaxt.http.Request(url).getResponse().getXML();
}
//**************************************************************************
//** createDocument
//**************************************************************************
/** Used to create a DOM document from a java.io.File. Returns null if the
* file cannot be serialized to XML.
*/
public static Document createDocument(java.io.File file){
if (file.exists()==false) return null;
try{
return createDocument(new java.io.FileInputStream(file));
}
catch(Exception e){
//e.printStackTrace();
return null;
}
}
//**************************************************************************
//** createDocument
//**************************************************************************
/** Used to create a DOM document from a String. Returns null if the string
* is invalid.
*/
public static Document createDocument(String xml){
if (xml==null) return null;
xml = xml.trim();
String encoding = "UTF-8";
try{
String xmlHeader = xml.substring(xml.indexOf(""), xml.indexOf("?>"));
if (xmlHeader.contains(" encoding")){
encoding = xmlHeader.substring(xmlHeader.indexOf(" encoding")+" encoding".length());
encoding = encoding.substring(encoding.indexOf("=")+1);
while(encoding.substring(0, 1).equals(" ")){
encoding = encoding.substring(1);
}
String firstChar = encoding.substring(0, 1);
if (firstChar.equals("\"") || firstChar.equals("'")){
encoding = encoding.substring(1);
encoding = encoding.substring(0, encoding.indexOf(firstChar)).trim();
}
else{
encoding = encoding.substring(0, encoding.indexOf(" ")).trim();
}
}
}
catch(Exception e){}
return createDocument(xml, encoding);
}
public static Document createDocument(String xml, String charsetName){
xml = xml.trim();
try{
return createDocument(new ByteArrayInputStream(xml.getBytes(charsetName)));
}
catch(Exception e){
//e.printStackTrace();
return createDocument(new ByteArrayInputStream(xml.getBytes()));
}
}
//**************************************************************************
//** createDocument
//**************************************************************************
/** Used to create a DOM document from an InputStream. */
public static Document createDocument(InputStream is){
try{
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
return builder.parse(is);
}
catch(Exception e){
//e.printStackTrace();
return null;
}
}
//**************************************************************************
//** getOuterNode
//**************************************************************************
/** Returns the outer node for a given xml document.
* @param xml A org.w3c.dom.Document
*/
public static Node getOuterNode(Document xml){
if (xml==null) return null;
NodeList OuterNodes = xml.getChildNodes();
for (int i=0; i