package test.base;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.apache.log4j.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
/**
*<p> 这是一个XML的数据包装类,实现了对XML的简单包装,默认的根结点是property ;
*只是增加一级子结点,子结点只有一个text内容;
* 获取子结点的内容是根据前面的 <tag, value>得到的;</p>
*<p> 这个包装类可以很容易的构造出一个简单的 org.jdom.Document对象;
* 然后将该文档对象转化成 byte[]对象。</p>
*<p> 相反的过程,包装类可以将由Document转换出来的 byte[] 对象转换成org.jdom.Document 对象;
* 然后从 Document 中读取出 <tag,value>。</p>
* @author wangyi
*
*/
public class XmlDatagram {
/** 日志处理器。 */
private static final Logger logger =Logger.getLogger(XmlDatagram.class);
/** JDOM文档。 */
private Document document;
/**
* 默认的构造方法。
* @param messageid
*/
public XmlDatagram() {
document = new Document();
document.setRootElement(new Element("property"));
}
/**
* 用XML文档的 byte[] 构造 XmlDatagram对象。
* @param array 由标准的XML文档转换成的 byte[]对象。
*/
public XmlDatagram(byte[] array) {
ByteArrayInputStream binput =new ByteArrayInputStream(array);
SAXBuilder builder = new SAXBuilder();
try {
this.document= builder.build(binput);
} catch (IOException ex){
logger.error("从byte构造document的时候出现IO异常。",ex);
} catch (JDOMException ex){
logger.error("从byte构造document的时候出现JDOM异常。",ex);
}
}
/**
* 增加子结点。
* @param tag 标签。
* @param value 标签的内容。
* @return 新创建的 Element 对象。
*/
public Element addChild(String tag, String value){
Element element = new Element(tag);
element.setText(value);
document.getRootElement().addContent(element);
return element;
}
/**
* 得到子结点的内容。
* @param tag 标签。
* @return 标签的内容。
*/
public String getChildValue(String tag) {
String value =document.getRootElement().getChildText(tag);
return value;
}
/**
* 得到字节数组。
* @return 由 XML 文档转换成的 byte[]对象。
* @throws IOException
*/
public byte[] toByteArrays() throws IOException{
ByteArrayOutputStream boutput =new ByteArrayOutputStream();
Format format =Format.getCompactFormat();
format.setEncoding("UTF-8");
XMLOutputter xmlOutput = new XMLOutputter(format);
xmlOutput.output(this.document,boutput);
return boutput.toByteArray();
}
}