package com.plas.util; import java.io.FileWriter; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jdom.Attribute; 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; import com.plas.pojo.bean.SysAreacate; import com.plas.pojo.bean.SysNewsCate; import com.plas.pojo.bean.SysNewsSource; public class AnalysisXML { //指定xml解析器,设置默认解析器 private SAXBuilder builder; private Document document; private Element roots; private String xmlpath ; /** * 初始化信息 * @param xmlpath */ public AnalysisXML(String xmlpath){ builder = new SAXBuilder(false); try { document = builder.build(xmlpath); } catch (JDOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }//获得xml文档 roots = document.getRootElement();//获得根元素 this.xmlpath = xmlpath; } public AnalysisXML(){ } /** * 删除 * @param cateid * @return */ public String delete(String cateCode){ Element ele =null; deleteXml(roots.getChildren("cate"),cateCode); saveXml(); return null; } public String delete(Long cateCode){ Element ele =null; deleteXml(roots.getChildren("cate"),cateCode); saveXml(); return null; } /** * 递归查找xml * @param sublist * @param conint * @return */ public Element recursiveXml(List sublist,String catecode){ if(catecode.equals("0")) return roots; if(sublist==null) return null; Element ele = null; for(int i=0;i<sublist.size();i++){ ele = (Element)sublist.get(i); if(ele.getAttributeValue("id").equals(catecode)){ return ele;//返回结果集 }else{ ele = recursiveXml(ele.getChildren("cate"),catecode); if(ele!=null && ele.getAttributeValue("id").equals(catecode)) return ele;//返回结果集 } } return null; } /** * 递归查找xml * @param sublist * @param conint * @return */ public Element recursivenewsXml(List sublist,Long cateid){ if(cateid==0) return roots; if(sublist==null) return null; Element ele = null; for(int i=0;i<sublist.size();i++){ ele = (Element)sublist.get(i); if(Integer.parseInt(ele.getAttributeValue("id"))==cateid){ return ele;//返回结果集 }else{ ele = recursivenewsXml(ele.getChildren("cate"),cateid); if(ele!=null && Integer.parseInt(ele.getAttributeValue("id"))==cateid) return ele;//返回结果集 } } return null; } /** * 递归查找删除 * @param sublist * @param cateid * @return */ public int deleteXml(List sublist,String cateCode){ Element ele = null; for(int i=0;i<sublist.size();i++){ ele = (Element)sublist.get(i); if(cateCode.equals(ele.getAttributeValue("id"))){ sublist.remove(i); }else{ int j = deleteXml(ele.getChildren("cate"),cateCode); if(j!=0) ele.getChildren("cate").remove(j);//返回结果集 } } return 0; } public int deleteXml(List sublist,Long cateCode){ Element ele = null; for(int i=0;i<sublist.size();i++){ ele = (Element)sublist.get(i); if(cateCode==Integer.parseInt(ele.getAttributeValue("id"))){ sublist.remove(i); }else{ int j = deleteXml(ele.getChildren("cate"),cateCode); if(j!=0) ele.getChildren("cate").remove(j);//返回结果集 } } return 0; } /** * 更改xml的内容 * */ public void saveXml(){ Format format = Format.getCompactFormat(); format.setEncoding("gb2312");//设置文本编码 format.setIndent(" ");//设置换行缩进 FileWriter writer; XMLOutputter output; try { writer = new FileWriter(xmlpath); output = new XMLOutputter(format); output.output(document, writer); writer.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 行政地区设置 生成返回页面的xml * */ public String getareacate(List list){ List cate = null; StringBuffer buffer=new StringBuffer(); for(int i=0;i<list.size();i++){ if(((SysAreacate)list.get(i)).getFatherid().equals("0")){ cate=roots.getChildren("cate"); } else{ cate=recursiveXml(roots.getChildren("cate"),((SysAreacate)list.get(i)).getCatecode()).getChildren("cate"); } for(int j=0;cate!=null&&j<cate.size();j++){ Element ele=(Element)cate.get(j); buffer .append("<cate><id>") .append(ele.getAttributeValue("id")) .append("</id>") .append("<name>") .append(ele.getChild("name").getText()) .append("</name>") .append("<down>") .append(ele.getChild("down").getText()) .append("</down>") .append("<catecode>") .append(ele.getChild("catecode").getText()) .append("</catecode>") .append("</cate>"); } } buffer.append("</cates>"); return buffer.toString(); } public String findbyid(long id){ return recursivenewsXml(roots.getChildren("cate"),id).getChild("name").getText(); } public String findbyid(String code){ return recursiveXml(roots.getChildren("cate"),code).getChild("name").getText(); } public String findcode(long id){ return recursivenewsXml(roots.getChildren("cate"),id).getChild("code").getText(); } public String findcode(String code){ return recursiveXml(roots.getChildren("cate"),code).getChild("code").getText(); } public String oneElement(Long id){ // Element ele = recursiveXml(roots.getChildren("cate"),id); // StringBuffer buffer = new StringBuffer("<cates><cate>"); // buffer // .append("<name>") // .append(ele.getChild("name").getText()) // .append("</name>") // .append("<id>") // .append(ele.getChild("id").getText()) // .append("</id>") // .append("<website>") // .append(ele.getChild("website").getText()) // .append("</website>"); // buffer.append("</cate></cates>"); return ""; } public Document getDocument(String xmlpath) { builder = new SAXBuilder(false); try { document = builder.build(xmlpath); } catch (JDOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }//获得xml文档 return document; } /** * 查找某个元素 * @param id * @return */ public Element getOneElement(long id){ return recursivenewsXml(roots.getChildren("cate"),id); } public Element getOneElement(String code){ return recursiveXml(roots.getChildren("cate"),code); } } JAVA类调用时: 删除 public String deleteXML(){ List list=selectforfatherid("0"); if(!list.isEmpty()){ for(int i=0;i<list.size();i++){ AnalysisXML analysisXML = new AnalysisXML(ServletActionContext.getRequest().getRealPath("/xmldata")+"//areaCate.xml"); analysisXML.delete(((SysAreacate)list.get(i)).getCatecode()); } } return null; } ///保存/ public String save(List list) { SysAreacate fathercate=null; // analysisXML.delete("086"); // 查询父记录 if(list.isEmpty()){ } else{ for(int i=0;i<list.size();i++){ fathercate=(SysAreacate)list.get(i); fathercate.setUptime(new Date()); fathercate.setDown(new Long(0)); fathercate.setCatecode(fathercate.getCatecode().toLowerCase()); TestAreacate t = new TestAreacate(); fathercate.setCntospell(t.getFullSpell(fathercate.getCatename())); if(fathercate==null) fathercate.setDepth(new Long(1));//一级目录 else{ fathercate.setDown(fathercate.getDown()+1);//下级目录加1 fathercate.setDepth(fathercate.getDepth()+1); // sys.save(fathercate); } AnalysisXML analysisXML = new AnalysisXML(ServletActionContext.getRequest().getRealPath("/xmldata")+"//areaCate.xml"); analysisXML.update(fathercate.getCatecode(),fathercate.getCatename(),fathercate.getCatecode(),fathercate.getFatherid(),2); } for(int i=0;i<list.size();i++){ List newlist=sysAreacateDAO.findByFatherid(((SysAreacate)list.get(i)).getCatecode()); save(newlist); } } return null; }