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