方法一、dom读取xml:
package cn.sm.xml;
import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.util.Properties;import java.util.Scanner;import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;
import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class Xml {
/* * 根据姓名查找节点 */ public static Node getNodeByName(Document doc,String name){ //获取根元素 Element root=doc.getDocumentElement(); //获取根元素下所有的节点元素 NodeList eEmp=root.getElementsByTagName("T_STAFF"); //遍历所有根元素下的所有子节点 for(int i=0;i<eEmp.getLength();i++){ Element Emp=(Element) eEmp.item(i);//获取第i+1个T_STAFF节点 NodeList nlist=Emp.getChildNodes();//获取该节点下面所有的子节点 //遍历该节点下面所有的子节点 for(int j=0;j<nlist.getLength();j++){ Node node=nlist.item(j); if(name.equals(node.getTextContent())){//判断该节点内容是否与姓名是否相同 return node; } else{ continue; } } } return null; } /* * 保存xml文件 */ public static void savexml(Document doc) throws TransformerException, IOException{ //创建变换工厂对象 TransformerFactory transformerFactory=TransformerFactory.newInstance(); //创建变换的对象 Transformer transformer=transformerFactory.newTransformer(); //创建DOMSource对象 DOMSource domsource=new DOMSource(doc); //设置编码类型 Properties properties=transformer.getOutputProperties(); properties.setProperty(OutputKeys.INDENT, "yes"); properties.setProperty(OutputKeys.ENCODING, "UTF-8"); transformer.setOutputProperties(properties); FileOutputStream fos=new FileOutputStream("datas.xml"); OutputStreamWriter osw=new OutputStreamWriter(fos,"utf-8"); StreamResult result=new StreamResult(osw); //把DOM文件转换成xml文件 transformer.transform(domsource, result); osw.close(); fos.close(); } /* * 查看所有元素的内容 */ public static void getallinfo(Document doc){ //获取根元素 Element root=doc.getDocumentElement(); //获取根元素下所有的子节点 NodeList eEmp=root.getElementsByTagName("T_STAFF"); //遍历所有的子节点 boolean flag=true; for(int i=0;i<eEmp.getLength();i++){ Element Emp=(Element) eEmp.item(i);//获取第i+1个节点元素 NodeList nlist=Emp.getChildNodes();//获取该节点下所有的子节点元素 //遍历所有的子元素 if(flag){ for(int j=0;j<nlist.getLength();j++){ Node node=nlist.item(j); String nodename=node.getNodeName(); if("#text".equals(nodename)){ continue; } else{ System.out.print(nodename+"\t"); } } flag=false; System.out.println(); } for(int j=0;j<nlist.getLength();j++){ Node node=nlist.item(j); if("#text".equals(node.getNodeName())){ continue; } String nodetext=node.getTextContent(); System.out.print(nodetext+"\t\t"); } } } /* * 修改某员工信息 */ public static void update(Document doc) throws TransformerException, IOException{ Scanner input =new Scanner(System.in); System.out.println("请输入需要修改的员工姓名:"); Node node=getNodeByName(doc, input.next()); if(node==null){ System.out.println("该员工信息不存在"); }else{ Element eEmp=(Element) node.getParentNode(); Element eName=(Element) eEmp.getElementsByTagName("S_STAFF_NAME").item(0); System.out.println("请输入修改的姓名:"); eName.setTextContent(input.next()); Element eDept=(Element) eEmp.getElementsByTagName("S_DEPT_NAME").item(0); System.out.println("请输入修改的部门:"); eDept.setTextContent(input.next()); Element eSex=(Element) eEmp.getElementsByTagName("S_SEX").item(0); System.out.println("请输入修改的性别:"); eSex.setTextContent(input.next()); Element eAge=(Element) eEmp.getElementsByTagName("I_AGE").item(0); System.out.println("请输入修改的年龄:"); eAge.setTextContent(input.next()); Element eAddr=(Element) eEmp.getElementsByTagName("S_ADDRESS").item(0); System.out.println("请输入修改的地址:"); eAddr.setTextContent(input.next()); Element eTel=(Element) eEmp.getElementsByTagName("I_TEL").item(0); System.out.println("请输入修改的电话号码:"); eTel.setTextContent(input.next()); savexml(doc); System.out.println("修改成功!"); } } /* * 删除某员工信息 */ public static void delete(Document doc) throws TransformerException, IOException{ Scanner input = new Scanner(System.in); System.out.println("请输入要删除的员工姓名:"); Node node=getNodeByName(doc, input.next()); if(node==null){ System.out.println("该员工信息不存在"); } node.getParentNode().getParentNode().removeChild(node.getParentNode()); savexml(doc); System.out.println("删除成功!"); } /* * 添加员工信息 */ public static void add(Document doc) throws TransformerException, IOException{ //获取根元素 //Element root=doc.getDocumentElement(); Scanner input =new Scanner(System.in); //创建一个T_STAFF节点 Element eEmp=doc.createElement("T_STAFF"); //创建一个S_STAFF_NAME节点 Element eName=doc.createElement("S_STAFF_NAME"); System.out.println("请输入姓名:"); eName.setTextContent(input.next()); eEmp.appendChild(eName);//添加到T_STAFF节点中 //创建一个S_DEPT_NAME节点 Element eDept=doc.createElement("S_DEPT_NAME"); System.out.println("请输入部门名称:"); eDept.setTextContent(input.next()); eEmp.appendChild(eDept); //创建一个S_SEX节点 Element eSex=doc.createElement("S_SEX"); System.out.println("请输入性别:"); eSex.setTextContent(input.next()); eEmp.appendChild(eSex); //创建一个I_AGE节点 Element eAge=doc.createElement("I_AGE"); System.out.println("请输入年龄:"); eSex.setTextContent(input.next()); eEmp.appendChild(eAge); //创建一个S_ADDRESS节点 Element eAddr=doc.createElement("S_ADDRESS"); System.out.println("请输入地址:"); eAddr.setTextContent(input.next()); eEmp.appendChild(eAddr); //创建一个I_TEL节点 Element eTel=doc.createElement("I_TEL"); System.out.println("请输入电话:"); eAddr.setTextContent(input.next()); eEmp.appendChild(eTel); Element root=doc.getDocumentElement();//获取根节点 root.appendChild(eEmp);//添加到根节点下 savexml(doc); System.out.println("添加成功"); } }
方法二、dom4j读取xml文件(dom4j.jar自己下载)
package Dom4fOperationXML;
import java.io.File;
import java.io.FileWriter;import java.io.IOException;import java.util.Iterator;import java.util.Scanner;import org.dom4j.Document;
import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class XMLOperation {
public static void main(String[] args) throws DocumentException, IOException { File file=new File("datas.xml"); //判断文件是否存在 if(!file.exists()){ System.out.println("datas文件不存在或目录结构不正确"); return; } //创建SAXReader 对象 SAXReader saxReader =new SAXReader(); //通过SAXReader对象获取文件生成Document对象 Document doc=saxReader.read(file); //getEmpInfo(doc);//获取所有员工的信息 //addEmp(doc);//添加新员工 //deleEmp(doc);//删除员工 updateEmp(doc); } @SuppressWarnings("rawtypes") public static void getEmpInfo(Document doc){ //获取xml文件根元素 Element root=doc.getRootElement(); Iterator iterEmp=root.elementIterator();//获取根元素下的所有孩子节点 boolean flag=true; while(iterEmp.hasNext()){//遍历根节点的所有孩子节点 Element eEmp=(Element) iterEmp.next();//获取根元素的节点 //属性节点名只需要一次就行 if(flag){ System.out.println("\t员工信息列表"); //循环遍历该节点元素的属性节点 for(Iterator iter=eEmp.elementIterator();iter.hasNext();){ Element eContent=(Element) iter.next();//获得属性节点 String sElementName=eContent.getName();//获取属性节点名 System.out.print(sElementName+"\t"); } System.out.println("\n----------------------------------"); flag=false; } } iterEmp=root.elementIterator(); while(iterEmp.hasNext()){ Element eEmp=(Element) iterEmp.next(); Iterator iter=eEmp.elementIterator(); while(iter.hasNext()){ Element eContent=(Element) iter.next(); String sElementValue=eContent.getText();//获取属性节点的内容 System.out.print(sElementValue+"\t\t"); } System.out.println(); } } /* * 保存xml文件 */ public static void Savexml(Document doc) throws IOException { FileWriter fw=new FileWriter("datas.xml"); XMLWriter xw=new XMLWriter(fw); xw.write(doc); xw.close(); fw.close(); } /* * 根据雇员姓名获取信息节点 */ @SuppressWarnings("rawtypes") public static Element getElementByName(Document doc,String name){ //获取xml文档根元素 Element root=doc.getRootElement(); Iterator iteremp=root.elementIterator(); while(iteremp.hasNext()){ Element eEmp=(Element) iteremp.next(); Iterator eIter=eEmp.elementIterator(); while(eIter.hasNext()){ Element eContent =(Element) eIter.next(); if(name.equals(eContent.getText())){ System.out.println(eContent.getText()); return eContent; } } } return null; } /* * 添加员工信息至xml文档 */ public static void addEmp(Document doc) throws IOException{ Scanner input =new Scanner(System.in); //获取xml文件根元素 Element root=doc.getRootElement(); //创建员工新节点 Element eEmp=root.addElement("T_STAFF"); //创建S_STAFF_NAME节点 Element eName=eEmp.addElement("S_STAFF_NAME"); System.out.println("请输入新员工姓名:"); eName.setText(input.next()); //创建S_DEPT_NAME节点 Element eDept=eEmp.addElement("S_DEPT_NAME"); System.out.println("请输入新员工部门:"); eDept.setText(input.next()); //创建S_SEX节点 Element eSex=eEmp.addElement("S_SEX"); System.out.println("请输入新员工性别:"); eSex.setText(input.next()); //创建I_AGE节点 Element eAge=eEmp.addElement("I_AGE"); System.out.println("请输入新员工年龄:"); eAge.setText(input.next()); //创建S_ADDRESS节点 Element eAddr=eEmp.addElement("S_ADDRESS"); System.out.println("请输入新员工地址:"); eAddr.setText(input.next()); //创建I_TEL节点 Element eTel=eEmp.addElement("I_TEL"); System.out.println("请输入新员工号码:"); eTel.setText(input.next()); Savexml(doc); System.out.println("添加成功"); } /* * 删除员工信息 */ public static void deleEmp(Document doc) throws IOException{ Scanner input =new Scanner(System.in); System.out.println("请输入要删除的员工信息:"); Element eName=getElementByName(doc, input.next()); if(eName==null){ System.out.println("该员工信息不存在"); return ; } eName.getParent().getParent().remove(eName.getParent()); Savexml(doc); System.out.println("删除成功"); } public static void updateEmp(Document doc) throws IOException{ Scanner input =new Scanner(System.in); System.out.println("请输入要修改员工的姓名:"); Element eName=getElementByName(doc, input.next()); if(eName==null){ System.out.println("该员工信息不存在"); return ; } Element eEmp=eName.getParent(); System.out.println("请输入修改后的名字:"); eName.setText(input.next()); Element eDept=eEmp.element("S_DEPT_NAME"); System.out.println("请输入修改后的部门:"); eDept.setText(input.next()); Element eSex=eEmp.element("S_SEX"); System.out.println("请输入修改后的性别:"); eSex.setText(input.next()); Element eAge=eEmp.element("I_AGE"); System.out.println("请输入修改后的年龄:"); eAge.setText(input.next()); Element eAddr=eEmp.element("S_ADDRESS"); System.out.println("请输入修改后的地址:"); eAddr.setText(input.next()); Element eTel=eEmp.element("I_TEL"); System.out.println("请输入修改后的电话号码:"); eTel.setText(input.next()); Savexml(doc); System.out.println("修改成功"); }}
xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<Root><T_STAFF>
<S_STAFF_NAME>燕子</S_STAFF_NAME> <S_DEPT_NAME>偷盗部</S_DEPT_NAME> <S_SEX>女</S_SEX> <I_AGE>22</I_AGE> <S_ADDRESS>淮安市</S_ADDRESS> <I_TEL>15587332213</I_TEL> </T_STAFF> <T_STAFF> <S_STAFF_NAME>王五</S_STAFF_NAME> <S_DEPT_NAME>市场部</S_DEPT_NAME> <S_SEX>男</S_SEX> <I_AGE>23</I_AGE> <S_ADDRESS>广州白云区</S_ADDRESS> <I_TEL>13726731234</I_TEL> </T_STAFF><T_STAFF>
<S_STAFF_NAME>李丽</S_STAFF_NAME> <S_DEPT_NAME>市场部</S_DEPT_NAME> <S_SEX>女</S_SEX> <I_AGE>25</I_AGE> <S_ADDRESS>广州白云区</S_ADDRESS> <I_TEL>13726731234</I_TEL> </T_STAFF> <T_STAFF> <S_STAFF_NAME>龙远康</S_STAFF_NAME> <S_DEPT_NAME>技术部</S_DEPT_NAME> <S_SEX>男</S_SEX> <I_AGE>23</I_AGE> <S_ADDRESS>广州市黄埔区</S_ADDRESS> <I_TEL>18898328117</I_TEL> </T_STAFF> </Root>