方法一、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>