简单读取xml的两种方式

前端之家收集整理的这篇文章主要介绍了简单读取xml的两种方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

猜你在找的XML相关文章