利用dom4j 对xml进行读写操作
下面是我项目中Action中的两个方法:
要导包:dom4j-1.6-1.jar
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
//写xml
private void writeXmlNewProduct(){
List<Object[]> list=ps.topFiveNewProduct();
String xmlPath = ServletActionContext.getServletContext().getRealPath("/pages/xml");
Document doc = DocumentHelper.createDocument(); //创建一个Document
Element root = doc.addElement("products");//添加根节点
for (int i = 0; i <list.size(); i++) {
Element product = root.addElement("product").addAttribute("pid", list.get(i)[1].toString());
Element pname = product.addElement("pname");
Element price1 = product.addElement("beforePrice");
Element price2 = product.addElement("nowPrice");
Element pic = product.addElement("pic");
pname.setText(list.get(i)[3].toString());
price1.setText(list.get(i)[10].toString());
price2.setText(list.get(i)[9].toString());
pic.setText(list.get(i)[6].toString());
}
try{
OutputFormat format = new OutputFormat("", true); //格式
format.setEncoding("UTF-8");
XMLWriter xmlWriter = new XMLWriter(new PrintWriter(xmlPath+"/newProduct.xml"), format);
xmlWriter.write(doc); //写入xml文件中
xmlWriter.close();
}catch(IOException e){
e.printStackTrace();
}
}
//读取xml
private void readXmlNewProduct() throws Exception{
SAXReader saxReader = new SAXReader(); //准备一个SAXReader读取器
String xmlPath = ServletActionContext.getServletContext().getRealPath("/pages/xml/newProduct.xml");
Document doc = null;
List<Map> listmap=new ArrayList<Map>();
try {
try {
FileInputStream in = new FileInputStream(new File(xmlPath));
Reader read = new InputStreamReader(in,"gbk"); //防止中午读取后乱码,所以转gbk格式
doc = saxReader.read(read); //读取文档
} catch (FileNotFoundException e) {
System.out.println(e);
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} catch (DocumentException e) {
System.out.println(e);
e.printStackTrace();
}
Element books = doc.getRootElement(); //获得文档的根节点
Iterator it = books.elementIterator();//对根节点进行迭代节点元素
while(it.hasNext()){
HashMap<String,Object> map=new HashMap<String,Object>();
Element product = (Element)it.next();
Element name = product.element("pname");
Element price1 = product.element("beforePrice");
Element price2 = product.element("nowPrice");
Element pic = product.element("pic");
map.put("pid", product.attribute("pid").getText());
map.put("pname", name.getText());
map.put("price1", price1.getText());
map.put("price2", price2.getText());
map.put("pic", pic.getText());
listmap.add(map);
}
Util.toJson(listmap);
}