package com.ztev.chartservlet;
import java.io.OutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
* Document对象和XML对象的处理
* @author 朱志国 zhu.zhiguo@hotmail.com
*
*/
public class DataFactoryBase {
//添加节点
public void addXMLNode(Element nodeName,Element newNode,Document doc){
try {
if( nodeName.getNodeName()==null ){
//System.out.println("该节点不存在!");
}else{
doc.createElement("newNode");
nodeName.appendChild(newNode);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
//添加节点属性
public void addXMLNodeAttribute(Element nodeName,String attribute,String value){
try{
if(nodeName.getNodeName()==null){
System.out.println("该节点不存在!");
}else{
nodeName.setAttribute(attribute,value);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
//如果查询的结果全为空,则生成NullInfo节点的XML
public void NullInfoNode(Document doc,Element RootNode,String strInfo){
Element chart=doc.createElement("chart");
addXMLNode(RootNode,chart,doc);
addXMLNodeAttribute(chart,"color","red");
addXMLNodeAttribute(chart,"caption", strInfo + "无数据!");
addXMLNodeAttribute(chart,"type","2");
addXMLNodeAttribute(chart,"showControl","true");
}
/**
* 生成操作XML的Doc类
* @param caption 图形标题
* @return
*/
public Document BuilderDocument(String caption){
try{
//定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
//应用程序员可以用DocumentBuilder从 XML中获取一个 Document
DocumentBuilder builder = factory.newDocumentBuilder();
//DOMImplementation 接口为执行独立于文档对象模型的任何特定实例的操作提供了许多方法
DOMImplementation impl = builder.getDOMImplementation();
//创建具有文档元素的指定类型的 DOM Document 对象
Document doc = impl.createDocument(null,"chart",null);
Element chart = doc.getDocumentElement();
chart.setAttribute("caption", caption);//标题
chart.setAttribute("bgColor", "99CCFF,FFFFFF");//背景色
chart.setAttribute("baseFontSize", "12");//字体大小
chart.setAttribute("font", "sinsum");//字体
chart.setAttribute("bgAlpha", "40,100");
chart.setAttribute("bgRatio", "0,100");
chart.setAttribute("bgAngle", "360");
chart.setAttribute("showBorder", "1");
return doc;
}
catch(Exception ex){
ex.printStackTrace();
return null;
}
}
//把Doc类序列化为一个XML流
public void SerialDocument(OutputStream outStream, Document doc){
try{
//通过 TransformerFactory.newTransformer 方法获取此类的实例
TransformerFactory tFactory = TransformerFactory.newInstance();
//可以使用此实例处理来自不同源的 XML,并将转换输出写入各种接收器
Transformer transformer = tFactory.newTransformer();
//以 Document Object Model(DOM)树的形式充当转换 Source 树的持有者
DOMSource source = new DOMSource(doc);
//充当转换结果的持有者,可以为 XML、纯文本、HTML 或某些其他格式的标记
StreamResult result = new StreamResult(outStream);
//把 XML资源文件转换成Result结果集.
transformer.transform(source, result);
}
catch(Exception ex){
ex.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}