用dom4j读写数据

从数据库表里面读取数据并生成一个xml文件给用户下载,下面是所用到的函数,要注意设置好输出到页面的文件头,还有的就是要作为一个文件给人下载的话要 将header里面的属性设置为attachment(也就是作为附件的形式,而不是inline,inline的话会直接打开的).

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);
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值