从数据库表里面读取数据并生成一个xml文件给用户下载,下面是所用到的函数,要注意设置好输出到页面的文件头,还有的就是要作为一个文件给人下载的话要 将header里面的属性设置为attachment(也就是作为附件的形式,而不是inline,inline的话会直接打开的).
这里是解析xml文件函数,有一点要注意的就是要设置好reader的编码,一开始我用的gbk,读取的时候有错误,后来改成用gbk的编码方式就行了.
public void genXml()
{
logger.debug("Test=================================="+enumInfoManager.getObjectList().size());
HashMap<String, Object> result = this.getDefaultMap();
List<EnumInfo> list = enumInfoManager.getObjectList();
Criterion[] criterion;
Document doc=DocumentHelper.createDocument();
Element rootElement = doc.addElement("root");
Iterator iter = list.iterator();
while(iter.hasNext())
{
EnumInfo enumInfo = (EnumInfo)iter.next();
//EnumItem enumItem = enumItemManager.getObject(enumInfo.getId());
List<EnumItem> itemList = enumItemManager.getObjectList(Restrictions.eq("enumInfoId", enumInfo.getId()));
Element recordElement = rootElement.addElement("record");
Element idElement = recordElement.addElement("id");
idElement.setText(enumInfo.getId().toString());
Element tableNameElement = recordElement.addElement("tableName");
tableNameElement.setText(enumInfo.getTableName()==null?"":enumInfo.getTableName());
Element fieldNameElement = recordElement.addElement("fieldName");
fieldNameElement.setText(enumInfo.getFieldName()==null?"":enumInfo.getFieldName());
Element enumNameElement = recordElement.addElement("enumName");
enumNameElement.setText(enumInfo.getEnumName()==null?"":enumInfo.getEnumName());
Element statusElement = recordElement.addElement("status");
statusElement.setText(enumInfo.getStatus()==null?"":enumInfo.getStatus());
Element systemFlagElement = recordElement.addElement("systemFlag");
systemFlagElement.setText(enumInfo.getSystemFlag()==null?"":enumInfo.getSystemFlag());
Iterator iiter = itemList.iterator();
while(iiter.hasNext())
{
EnumItem enumItem = (EnumItem)iiter.next();
Element itemElement = recordElement.addElement("item");
Element idEle = itemElement.addElement("id");
idEle.setText(enumItem.getId().toString());
Element fieldEle = itemElement.addElement("fieldValue");
fieldEle.setText(enumItem.getFieldValue()==null?"":enumItem.getFieldValue());
Element displayEle = itemElement.addElement("displayValue");
displayEle.setText(enumItem.getDisplayValue()==null?"":enumItem.getDisplayValue());
Element infoIdEle = itemElement.addElement("enumInfoId");
infoIdEle.setText(enumItem.getEnumInfoId()==null?"":enumItem.getEnumInfoId().toString());
Element orderEle = itemElement.addElement("displayOrder");
orderEle.setText(enumItem.getDisplayOrder()==null?"":enumItem.getDisplayOrder().toString());
Element statusEle = itemElement.addElement("status");
statusEle.setText(enumItem.getStatus()==null?"":enumItem.getStatus());
}
}
try
{
//Writer out=new FileWriter("c:\\enum.xml");
this.getResponse().setHeader("Pragma","No-cache");
this.getResponse().setHeader("Cache-Control","no-cache");
this.getResponse().setDateHeader("Expires", 0);
this.getResponse().addHeader("Content-disposition", "attachment" + "; filename=\"" + "enum.xml" + "\"");
this.getResponse().setContentType("text/xml");
OutputFormat format=OutputFormat.createCompactFormat();
format.setEncoding("UTF-8");
XMLWriter writer=new XMLWriter(this.getResponse().getOutputStream(),format);
writer.write(doc);
writer.close();
this.getResponse().flushBuffer();
//System.out.println("生成xml文件成功!");
}
catch(IOException e)
{
e.printStackTrace();
result.put(SUCCESS, false);
outJson(result);
//System.out.println("生成失败了!");
}
}
这里是解析xml文件函数,有一点要注意的就是要设置好reader的编码,一开始我用的gbk,读取的时候有错误,后来改成用gbk的编码方式就行了.
public void readXml(File file)
{
SAXReader reader = new SAXReader();
reader.setEncoding("utf-8"); //这里是关键设置
Document doc = null;
try
{
doc = reader.read(file);
}
catch(DocumentException e)
{
e.printStackTrace();
}
Element rootEle = doc.getRootElement();
Iterator iter = rootEle.elementIterator("record");
while(iter.hasNext())
{
Element recordEle = (Element)iter.next();
String id = recordEle.elementTextTrim("id");
String tableName = recordEle.elementTextTrim("tableName");
String fieldName = recordEle.elementTextTrim("fieldName");
String enumName = recordEle.elementTextTrim("enumName");
String status = recordEle.elementTextTrim("status");
String systemFlag = recordEle.elementTextTrim("systemFlag");
System.out.println(id);
System.out.println(tableName);
System.out.println(fieldName);
System.out.println(enumName);
System.out.println(status);
System.out.println(systemFlag);
Iterator iiter = recordEle.elementIterator("item");
while(iiter.hasNext())
{
Element itemEle = (Element)iiter.next();
String iid = itemEle.elementTextTrim("id");
String fieldValue = itemEle.elementTextTrim("fieldValue");
String displayValue = itemEle.elementTextTrim("displayValue");
String enumInfoId = itemEle.elementTextTrim("enumInfoId");
String displayOrder = itemEle.elementTextTrim("displayOrder");
String istatus = itemEle.elementTextTrim("status");
System.out.println(iid);
System.out.println(fieldValue);
System.out.println(displayValue);
System.out.println(enumInfoId);
System.out.println(displayOrder);
System.out.println(istatus);
}
}
}