方法一、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+"tt"); }
}
} /* * 修改某员工信息 */
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+"tt"); } 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> (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|