--文章源自一位网友
 
  
struts开发实践—读写xml实例 
1.   准备工作:去java.sun.com下载org.w3c.dom包,将下载的包放在WEB-INF/lib目录下。包的文档说明可以参考http://java.sun.com/xml/jaxp/dist/1.1/docs/api/org/w3c/dom/package-summary.html。 
2.   本案主要功能是完成table的表头显示字段的设置。 
文件包括: 
1) print.xml:将字段属性写入xml文件(放入web-inf目录下) 
2) ReadWritePrintXML.java :print.xml的接口类: 
3) PrintReadAction.java :print.xml的Action 
4)PrintSetAction.java:写print.xml的Action 
5) PrintForm:print选择的对象ActionForm 
  
/****************print.xml代码begin******************************************/ 
<?xml version="1.0" encoding="UTF-8" ?>  
<TBL_EMPLOYEE> 
- <Field fieldName="employeeId" printName="职工ID"> 
  <ifPrint>0</ifPrint>  
  </Field> 
- <Field fieldName="employeeBasicInfo.deptName" printName="部门"> 
  <ifPrint>1</ifPrint>  
  </Field> 
<Field fieldName="employeeBasicInfo.employeeName" printName="职工姓名"> 
  <ifPrint>1</ifPrint>  
  </Field> 
- <Field fieldName="employeeBasicInfo.sex" printName="性别"> 
  <ifPrint>1</ifPrint>  
  </Field> 
- <Field fieldName="employeeBasicInfo.nation" printName="民族"> 
  <ifPrint>1</ifPrint>  
  </Field> 
- <Field fieldName="employeeBasicInfo.birthDate" printName="出生日期"> 
  <ifPrint>0</ifPrint>  
  </Field> 
- <Field fieldName="employeeBasicInfo.ages" printName="年龄"> 
  <ifPrint>1</ifPrint>  
  </Field> 
- <Field fieldName="employeeBasicInfo.workYear" printName="工龄"> 
  <ifPrint>1</ifPrint>  
  </Field> 
- <Field fieldName="employeeBasicInfo.idCard" printName="身份证号"> 
  <ifPrint>1</ifPrint>  
  </Field> 
- <Field fieldName="employeeBasicInfo.workDate" printName="参加工作时间"> 
  <ifPrint>0</ifPrint>  
  </Field> 
- <Field fieldName="employeeBasicInfo.politic" printName="政治面貌"> 
  <ifPrint>1</ifPrint>  
  </Field> 
- <Field fieldName="employeeBasicInfo.parchment" printName="文化程度"> 
  <ifPrint>1</ifPrint>  
  </Field> 
- <Field fieldName="nativePlace" printName="籍贯"> 
  <ifPrint>0</ifPrint>  
  </Field> 
- <Field fieldName="registerPlace" printName="户口所在地"> 
  <ifPrint>0</ifPrint>  
  </Field> 
- <Field fieldName="telephone" printName="联系电话"> 
  <ifPrint>0</ifPrint>  
  </Field> 
- <Field fieldName="houseAddress" printName="家庭住址"> 
  <ifPrint>0</ifPrint>  
  </Field> 
  </TBL_EMPLOYEE> 
/**********************print.xml代码end***************************************/ 
/**********************PrintForm.java Begin***************************************/ 
package test; 
  
import org.apache.struts.action.*; 
import javax.servlet.http.*; 
/** 
 * 打印form 
 */ 
public class PrintForm extends ActionForm { 
  /**字段名*/ 
  private String fieldName=""; 
  /**打印名*/ 
  private String printName=""; 
  /**是否打印*/ 
  private int ifPrint=0; 
  public void setFieldName(String fieldName) { 
    this.fieldName = fieldName; 
  } 
  public String getFieldName() { 
    return fieldName; 
  } 
  public void setPrintName(String printName) { 
    this.printName = printName; 
  } 
  public String getPrintName() { 
    return printName; 
  } 
  public void setIfPrint(int ifPrint) { 
     this.ifPrint = ifPrint; 
   } 
   public int getIfPrint() { 
     return ifPrint; 
   } 
  
  public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest httpServletRequest) { 
    /**@todo: finish this method, this is just the skeleton.*/ 
    return null; 
  } 
  public void reset(ActionMapping actionMapping, HttpServletRequest httpServletRequest) { 
  } 
} 
/****************printForm.java代码end******************************/ 
  
/****************ReadWritePrintXML.java代码Begin******************************/ 
package test; 
  
import java.io.*; 
import java.util.*; 
import javax.xml.parsers.*; 
import org.w3c.dom.*; 
import org.apache.crimson.tree.XmlDocument; 
import javax.xml.transform.*; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 
/** 
 * 读写printxml 
 */ 
public class ReadWritePrintXML { 
  /** 
   * 读printxml 
   * @param path:the path of xml put in 
   * @return 
   * @throws Exception 
   */ 
  public ArrayList readXMLFile(String path) throws Exception { 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db = null; 
    ArrayList list = new ArrayList(); 
    String[] data = null; 
    try { 
      db = dbf.newDocumentBuilder(); 
    } 
    catch (ParserConfigurationException pce) { 
      pce.printStackTrace(); 
    } 
    Document doc = null; 
    try { 
      doc = db.parse(path); 
    } 
    catch (DOMException dom) { 
      dom.printStackTrace(); 
    } 
    catch (IOException ioe) { 
      ioe.printStackTrace(); 
    } 
    Element root = doc.getDocumentElement(); 
    NodeList fields = root.getElementsByTagName("Field"); 
    for (int i = 0; i < fields.getLength(); i++) { 
      Element field = (Element) fields.item(i); 
      PrintSelectForm printSelectForm = new PrintSelectForm(); 
      printSelectForm.setFieldName(field.getAttribute("fieldName")); 
      printSelectForm.setPrintName(field.getAttribute("printName")); 
      NodeList datas = field.getElementsByTagName("ifPrint"); 
      if (datas.getLength() == 1) { 
        Element e = (Element) datas.item(0); 
        Text t = (Text) e.getFirstChild(); 
        printSelectForm.setIfPrint(t.getNodeValue()); 
      } 
      list.add(printSelectForm); 
    } 
    return list; 
  } 
  
  /** 
   * 写xml 
   * @param select:the selected id you set 
   * @param path:the path of xml put in 
   * @throws Exception 
   */ 
  public void writeXMLFile(String[] select, String path) throws Exception { 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db = null; 
    try { 
      db = dbf.newDocumentBuilder(); 
    } 
    catch (ParserConfigurationException pce) { 
      pce.printStackTrace(); 
    } 
    Document doc = null; 
    try { 
      doc = db.parse(path); 
    } 
    catch (DOMException dom) { 
      dom.printStackTrace(); 
    } 
    catch (IOException ioe) { 
      ioe.printStackTrace(); 
    } 
  
    Element root = doc.getDocumentElement(); 
    NodeList fields = root.getElementsByTagName("Field"); 
    for (int j = 0; j < select.length; j++) { 
      for (int i = 0; i < fields.getLength(); i++) { 
        Element field = (Element) fields.item(i); 
        if (field.getAttribute("fieldName").equals(select[j])) { 
          NodeList ifPrints = field.getElementsByTagName("ifPrint"); 
          if (ifPrints.getLength() == 1) { 
            Element e = (Element) ifPrints.item(0); 
            Text t = (Text) e.getFirstChild(); 
            t.setNodeValue("1"); 
          } 
        } 
      } 
    } 
    TransformerFactory tFactory = TransformerFactory.newInstance(); 
    Transformer transformer = tFactory.newTransformer(); 
    DOMSource source = new DOMSource(doc); 
    StreamResult result = new StreamResult(new java.io.File(path)); 
    transformer.transform(source, result); 
  } 
  /** 
   * 初始化xml 
   * @param path:the path of xml 
   * @throws Exception 
   */ 
  public void initialXMLFile(String path) throws Exception { 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db = null; 
    try { 
      db = dbf.newDocumentBuilder(); 
    } 
    catch (ParserConfigurationException pce) { 
      pce.printStackTrace(); 
    } 
    Document doc = null; 
    try { 
      doc = db.parse(path); 
    } 
    catch (DOMException dom) { 
      dom.printStackTrace(); 
    } 
    catch (IOException ioe) { 
      ioe.printStackTrace(); 
    } 
  
    Element root = doc.getDocumentElement(); 
    NodeList fields = root.getElementsByTagName("Field"); 
    for (int i = 0; i < fields.getLength(); i++) { 
      Element field = (Element) fields.item(i); 
      NodeList ifPrints = field.getElementsByTagName("ifPrint"); 
      if (ifPrints.getLength() == 1) { 
        Element e = (Element) ifPrints.item(0); 
        Text t = (Text) e.getFirstChild(); 
        t.setNodeValue("0"); 
      } 
  
    } 
    TransformerFactory tFactory = TransformerFactory.newInstance(); 
    Transformer transformer = tFactory.newTransformer(); 
    DOMSource source = new DOMSource(doc); 
    StreamResult result = new StreamResult(new java.io.File(path)); 
    transformer.transform(source, result); 
  
  } 
  
} 
/****************ReadWritePrintXML.java代码End********************************/ 
/****************PrintReadAction.java代码Begin***********************************/ 
package test; 
  
import org.apache.struts.action.*; 
  
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.ServletException; 
import java.io.IOException; 
  
/** 
 * 读取print.xml的字段信息,供选择 
 */ 
public class PrintReadAction extends Action { 
  public ActionForward perform(ActionMapping mapping,ActionForm form, 
    HttpServletRequest request,HttpServletResponse response) 
      throws IOException,ServletException { 
      ActionErrors errors = new ActionErrors(); 
      String[] ifPrint=null; 
      String path=request.getRealPath("/")+"/WEB-INF/print.xml"; 
      try { 
        ReadWritePrintXML readwrite=new ReadWritePrintXML(); 
        Collection colField = readwrite.readXMLFile(path); 
        request.setAttribute(BeanNames.TABLEFIELD_LIST, colField); 
        return mapping.findForward("success"); 
    } 
    catch (Throwable e) { 
      e.printStackTrace(); 
      ActionError error = new ActionError(e.getMessage()); 
      errors.add(ActionErrors.GLOBAL_ERROR, error); 
  
    } 
    saveErrors(request,errors); 
    return new ActionForward(mapping.getInput()); 
    } 
} 
/****************PrintReadAction.java代码End**********************************/ 
/****************PrintSetAction.java代码Begin*********************************/ 
package test; 
  
import org.apache.struts.action.*; 
import javax.servlet.http.*; 
import javax.servlet.*; 
import java.io.*; 
import java.util.*; 
  
/** 
 * 打印字段设置回写print.xml文件 
 */ 
public class PrintSetAction extends Action { 
  public ActionForward perform(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) 
  throws ServletException, IOException{ 
   ActionErrors errors = new ActionErrors(); 
   String[] multiSelect=request.getParameterValues("multiSelect"); 
   ArrayList colField=null; 
   String path=request.getRealPath("/")+"/WEB-INF/print.xml"; 
   try{ 
     ReadWritePrintXML readwrite = new ReadWritePrintXML(); 
     readwrite.initialXMLFile(path); 
     readwrite.writeXMLFile(multiSelect,path); 
     return null; 
   } 
   catch (Throwable e) { 
     e.printStackTrace(); 
     ActionError error = new ActionError(e.getMessage()); 
     errors.add(ActionErrors.GLOBAL_ERROR, error); 
  
   } 
   saveErrors(request, errors); 
   return new ActionForward(mapping.getInput()); 
 } 
} 
  
/****************PrintSetAction.java代码End**********************************/ 
  
  
  
  
   
 
  |