要操作的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();
}
}
}