使用JAVA对XML文件进行DOM操作

要操作的xml文件--------------------------------------------------------------------

<?xml version="1.0" encoding="gbk" standalone="no"?><plan>
  <item id="1"> 
    <day>-1</day> <!--星期几,-1代表给所有设备下达计划 -->
    <time>8:01</time> <!-- 时间 -->
    <machineId>-1</machineId> <!--  设备ID,-1代表所有设备 -->
    <state>0</state> <!--计划执行的次数,-1代表一直执行,1代表执行一次 -->
    <picNum>1</picNum>  <!-- 默认的取图张数  -->
  </item> 
 </plan>

--------------------------------------------------------------------------------------

xml生成的操作类--------------------------------------------------------------------------------

public class CatchPicPlan {
 private int id;
 private int  day;
 private String  time;
 private int  machineId; 
 private int picNum;
 private int  state;
 public CatchPicPlan(){
  
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public int getDay() {
  return day;
 }
 public void setDay(int day) {
  this.day = day;
 }
 public String getTime() {
  return time;
 }
 public void setTime(String time) {
  this.time = time;
 }
 public int getMachineId() {
  return machineId;
 }
 public void setMachineId(int machineId) {
  this.machineId = machineId;
 }
 public int getState() {
  return state;
 }
 public void setState(int state) {
  this.state = state;
 }
 public int getPicNum() {
  return picNum;
 }
 public void setPicNum(int picNum) {
  this.picNum = picNum;
 }
}

------------------------------------------------------------------------------------------

 

具体的操作类-------------------------------------------------------------------------------------

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;

import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.*;

public class OperateXml {
 
 public OperateXml(){
  
 }
 
 /**
  * 读取配置文件
  * @param fileName  配置文件名
  * @return  包含信息的list
  */
 public ArrayList<CatchPicPlan> readXml(String fileName){
  //存储结果的List
  ArrayList<CatchPicPlan> list=new ArrayList<CatchPicPlan>();
  try{
   //解析xml:实例化:解析工厂----解析器---dom对象
   DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
   DocumentBuilder builder=builderFactory.newDocumentBuilder();
   Document doc=builder.parse(new File(fileName));
   
   //获得根节点
   Element root=doc.getDocumentElement();
   //获得父节点的子节点,并遍历
   NodeList items=root.getElementsByTagName("item");
   for(int i=0;i<items.getLength();i++){
    CatchPicPlan cpp=new CatchPicPlan();
    //获得每一个item节点
    Element item=(Element)items.item(i);
    
    //获得item节点的属性
    int cppId=Integer.parseInt(item.getAttribute("id"));
    cpp.setId(cppId);
    
    //获得item节点的子节点day
    NodeList dayElement=item.getElementsByTagName("day");
    int cppDay=Integer.parseInt(dayElement.item(0).getFirstChild().getNodeValue());
    cpp.setDay(cppDay);
    
    //获得time节点的子节点day
    NodeList timeElement=item.getElementsByTagName("time");
    String cppTime=timeElement.item(0).getFirstChild().getNodeValue();
    cpp.setTime(cppTime);
    
    //获得machineId节点的子节点day
    NodeList machineIdElement=item.getElementsByTagName("machineId");
    int cppMachineId=Integer.parseInt(machineIdElement.item(0).getFirstChild().getNodeValue());
    cpp.setMachineId(cppMachineId);
    
    //获得picNum节点的子节点day
    NodeList picNumElement=item.getElementsByTagName("picNum");
    int cppPicNum=Integer.parseInt(picNumElement.item(0).getFirstChild().getNodeValue());
    cpp.setPicNum(cppPicNum);
    
    //获得state节点的子节点day
    NodeList stateElement=item.getElementsByTagName("state");
    int cppState=Integer.parseInt(stateElement.item(0).getFirstChild().getNodeValue());
    cpp.setState(cppState);
    
    list.add(cpp);
   }  
  }catch(Exception e){
   e.printStackTrace();
  }
  return list;
 }
 
 /**
  * 添加节点
  * @param outFileName
  * @param list
  */
 public void writeXml(String outFileName,ArrayList<CatchPicPlan>list){
  try{
   if(!new File(outFileName).exists()){
    new File(outFileName).createNewFile();
   }
   DocumentBuilderFactory buliderFactroy=DocumentBuilderFactory.newInstance();
   DocumentBuilder builder=buliderFactroy.newDocumentBuilder();
   Document doc=builder.parse(new File(outFileName));
   
//   Element  root=doc.createElement("plan");
//   doc.appendChild(root);//将根元素添加到文档节点上
   Element root=doc.getDocumentElement();//获取父类元素
     
   //遍历整个数族
   for(int i=0;i<list.size();i++){
    //创建一个duty对象
    CatchPicPlan cpp=list.get(i);
    //创建duty节点
    Element  item=doc.createElement("item");    
    item.setAttribute("id", String.valueOf(cpp.getId()));
    root.appendChild(item);//添加属性    
    
    //创建day节点
    Element dayElement=doc.createElement("day");
    item.appendChild(dayElement);
    Text tday=doc.createTextNode(String.valueOf(cpp.getDay()));    
    dayElement.appendChild(tday);
    
    //创建time节点
    Element timeElement=doc.createElement("time");
    item.appendChild(timeElement);
    Text ttime=doc.createTextNode(String.valueOf(cpp.getTime()));    
    timeElement.appendChild(ttime);
    
    //创建machineId节点
    Element machineIdElement=doc.createElement("machineId");
    item.appendChild(machineIdElement);
    Text tmachineId=doc.createTextNode(String.valueOf(cpp.getMachineId()));    
    machineIdElement.appendChild(tmachineId);
    
    //创建state节点
    Element stateElement=doc.createElement("state");
    item.appendChild(stateElement);
    Text tstate=doc.createTextNode(String.valueOf(cpp.getState()));    
    stateElement.appendChild(tstate);
            
    //创建picNum节点
    Element picNumElement=doc.createElement("picNum");
    item.appendChild(picNumElement);
    Text tpicNum=doc.createTextNode(String.valueOf(cpp.getPicNum()));    
    picNumElement.appendChild(tpicNum);
    
    }
   FileOutputStream fos = new FileOutputStream(outFileName);
      OutputStreamWriter outwriter = new OutputStreamWriter(fos);    
      callWriteXmlFile(doc,outwriter,"utf-8");
      outwriter.close();
      fos.close();
      
      
  }catch(Exception e){
   e.printStackTrace();
  }
  
 }
 /**
  * 让更改的信息永久固化
  * @param doc
  * @param w
  * @param encoding
  */
 private void callWriteXmlFile(Document doc, Writer w, String encoding){
  try{
   Source source = new DOMSource(doc);
   Result result = new StreamResult(w);
   Transformer xformer = TransformerFactory.newInstance().newTransformer();
   xformer.setOutputProperty(OutputKeys.ENCODING, encoding);
   xformer.transform(source, result); 
  }catch(Exception e){
   e.printStackTrace();
  }
 }
 
 /**
  * 删除节点
  * @param fileName
  * @param tag 要删除的节点id
  */
 public void delXml(String fileName,int tag){
  try{
   //解析xml:实例化:解析工厂----解析器---dom对象
   DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
   DocumentBuilder builder=builderFactory.newDocumentBuilder();
   Document doc=builder.parse(new File(fileName));
   
   //获得根节点
   Element root=doc.getDocumentElement();
   //获得父节点的子节点,并遍历
   NodeList items=root.getElementsByTagName("item");
   for(int i=0;i<items.getLength();i++){
    CatchPicPlan cpp=new CatchPicPlan();
    //获得每一个item节点
    Element item=(Element)items.item(i);
    
    //获得item节点的属性
    int cppId=Integer.parseInt(item.getAttribute("id"));
    //删除指定的节点
    if(cppId==tag){
     root.removeChild(item);
    }
   } 
   FileOutputStream fos = new FileOutputStream(fileName);
      OutputStreamWriter outwriter = new OutputStreamWriter(fos);    
      callWriteXmlFile(doc,outwriter,"utf-8");
      outwriter.close();
      fos.close();
  }catch(Exception e){
   e.printStackTrace();
  }
 }
 
 /**
  * 
  * @param fileName
  * @param cpp
  */
 public void updateXml(String fileName,CatchPicPlan cpp){

  try{
   //解析xml:实例化:解析工厂----解析器---dom对象
   DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
   DocumentBuilder builder=builderFactory.newDocumentBuilder();
   Document doc=builder.parse(new File(fileName));
   
   //获得根节点
   Element root=doc.getDocumentElement();
   //获得父节点的子节点,并遍历
   NodeList items=root.getElementsByTagName("item");
   for(int i=0;i<items.getLength();i++){    
    //获得每一个item节点
    Element item=(Element)items.item(i);
    
    //获得item节点的属性
    int cppId=Integer.parseInt(item.getAttribute("id"));
    //修改指定的节点
    if(cppId==cpp.getId()){
     root.removeChild(item);//删除
     
     //创建imte节点
     item=doc.createElement("item");    
     item.setAttribute("id", String.valueOf(cpp.getId()));
     root.appendChild(item);//添加属性    
     
     //创建day节点
     Element dayElement=doc.createElement("day");
     item.appendChild(dayElement);
     Text tday=doc.createTextNode(String.valueOf(cpp.getDay()));    
     dayElement.appendChild(tday);
     
     //创建time节点
     Element timeElement=doc.createElement("time");
     item.appendChild(timeElement);
     Text ttime=doc.createTextNode(String.valueOf(cpp.getTime()));    
     timeElement.appendChild(ttime);
     
     //创建machineId节点
     Element machineIdElement=doc.createElement("machineId");
     item.appendChild(machineIdElement);
     Text tmachineId=doc.createTextNode(String.valueOf(cpp.getMachineId()));    
     machineIdElement.appendChild(tmachineId);
     
     //创建state节点
     Element stateElement=doc.createElement("state");
     item.appendChild(stateElement);
     Text tstate=doc.createTextNode(String.valueOf(cpp.getState()));    
     stateElement.appendChild(tstate);
             
     //创建picNum节点
     Element picNumElement=doc.createElement("picNum");
     item.appendChild(picNumElement);
     Text tpicNum=doc.createTextNode(String.valueOf(cpp.getPicNum()));    
     picNumElement.appendChild(tpicNum);
    }
   } 
   FileOutputStream fos = new FileOutputStream(fileName);
      OutputStreamWriter outwriter = new OutputStreamWriter(fos);    
      callWriteXmlFile(doc,outwriter,"utf-8");
      outwriter.close();
      fos.close();
  }catch(Exception e){
   e.printStackTrace();
  }
 
 }
 
 public static void main(String[] args) {
  OperateXml ox=new OperateXml();
  try{
//   ArrayList<CatchPicPlan> list=ox.readXml("src/com/vsj/test/catchPicPlan.xml");
//   for(int i=0;i<list.size();i++){
//    CatchPicPlan cpp=new CatchPicPlan();
//    cpp=list.get(i);    
//    System.out.println(cpp.getId());
//    System.out.println(cpp.getDay());
//    System.out.println(cpp.getTime());
//    System.out.println(cpp.getMachineId());
//    System.out.println(cpp.getState());
//    System.out.println(cpp.getPicNum());
//   }
//   ox.writeXml("src/com/vsj/test/catchPicPlan.xml", list);
//   ox.delXml("src/com/vsj/test/catchPicPlan.xml", 2);
   CatchPicPlan cpp=new CatchPicPlan();
   cpp.setId(2);
   cpp.setDay(10);
   cpp.setTime("9点");
   cpp.setMachineId(10086);
   cpp.setPicNum(1000);
   cpp.setState(1);
   ox.updateXml("src/com/vsj/test/catchPicPlan.xml", cpp);
  }catch(Exception e){
   e.printStackTrace();
  }
  
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值