XmlUtil

package util;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
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;


import entity.Employee;

public class XmlUtilW {
			
	//读取xml里的emp所有数据
	public List<Employee> readXml() throws Exception{
		Document doc = getDocument();
		Element e = doc.getDocumentElement();
		List<Employee> list = new ArrayList<Employee>();
		NodeList nodelist = e.getElementsByTagName("emp");
		for(int i=0;i<nodelist.getLength();i++){
			 Node node = nodelist.item(i);
			 NodeList nodeList2 = node.getChildNodes();
			 Employee emp = new Employee();
			 for(int j=0;j<nodeList2.getLength();j++){
				 Node cn = nodeList2.item(j);
				 String nodestr = cn.getNodeName();
				 String tempstr = cn.getTextContent().trim();
				 if(nodestr.equals("id")){
					 emp.setId(Integer.parseInt(tempstr));
				 }
				 if(nodestr.equals("name")){
					 emp.setName(tempstr);
				 }
				 if(nodestr.equals("age")){
					 emp.setAge(Integer.parseInt(tempstr));
				 }
			 }
			 list.add(emp);
		}
		return list;
	}
	
	//增加一个emp
	public void writeXml(Employee emp) throws Exception{
		Document doc = getDocument();
		Element root = doc.getDocumentElement();
		Element empE = doc.createElement("emp");
		Element id = doc.createElement("id");
		id.setTextContent(emp.getId().toString());
		Element name = doc.createElement("name");
		name.setTextContent(emp.getName());
		Element age = doc.createElement("age");
		age.setTextContent(emp.getAge().toString());
		root.appendChild(empE);
		empE.appendChild(id);
		empE.appendChild(name);
		empE.appendChild(age);
		saveXml(doc);
	}
	
	//删除xml里的一条emp记录
	public void deleteXml(Integer id)throws Exception{
		Document doc = getDocument();
		Element e = doc.getDocumentElement();
		NodeList nodelist = e.getElementsByTagName("emp");
		for(int i=0;i<nodelist.getLength();i++){
			Node node = nodelist.item(i);
			NodeList cNL =node.getChildNodes();
			for(int j=0;j<cNL.getLength();j++){
				Node cn = cNL.item(j);
				String tempstr = cn.getTextContent().trim();
				if(tempstr.equals(id.toString())){
					cn.getParentNode().getParentNode().removeChild(node);
					break;
				}
			}
		}
		saveXml(doc);
	}
	
	//更新emp信息
	public void updateXml(Employee emp) throws Exception{
		Document doc = getDocument();
		Element e = doc.getDocumentElement();
		NodeList empsNodeList = e.getElementsByTagName("emp");
		for(int i=0;i<empsNodeList.getLength();i++){
			Node empNode = empsNodeList.item(i);
			NodeList empEleList = empNode.getChildNodes();
			for(int j=0;j<empEleList.getLength();j++){
				Node node = empEleList.item(j);
				String tempstr = node.getTextContent().trim();
				if(tempstr.equals(emp.getId().toString())){
					NodeList upEleList = empNode.getChildNodes();
					for(int k=0;k<upEleList.getLength();k++){
						Node upNode = upEleList.item(k);
						String nodestr = upNode.getNodeName();
						if(nodestr.equals("id")){
							upNode.setTextContent(emp.getId().toString());
						}
						if(nodestr.equals("age")){
							upNode.setTextContent(emp.getAge().toString());
						}
						if(nodestr.equals("name")){
							upNode.setTextContent(emp.getName());
						}
					}
				}
			}
			saveXml(doc);
		}
	}
	
//	根据id找到对应的emp
	public Employee findById(Integer id){
		try {
			List<Employee> emps = readXml();
			for (Employee employee : emps) {
				if(employee.getId() == id){
					return employee;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	//保存xml
	private void saveXml(Document document) throws Exception{
		 TransformerFactory tFactory = TransformerFactory.newInstance();// 创建XML输出工厂
		 Transformer transformer = tFactory.newTransformer();// 创建XML输出对象
		 DOMSource source = new DOMSource(document);// 源对象
		 String path = XmlUtilW.class.getClassLoader().getResource("employee.xml").getPath();
//		 String path = "D:/MyEclipse7/workspace/.metadata/.plugins/com.genuitec.eclipse.easie.tomcat.myeclipse/tomcat/webapps/webxml/WEB-INF/classes/employee.xml";
		 StreamResult result = new StreamResult(new File(path));// 目标对象
		 transformer.transform(source, result);
	}
	
	private Document getDocument() throws Exception {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setIgnoringElementContentWhitespace(true);
		DocumentBuilder parser = factory.newDocumentBuilder();
		 String path=XmlUtilW.class.getClassLoader().getResource("employee.xml").getPath();
//		 System.out.println("getDocument:" + path);
		Document document = parser.parse(new File(path));
		return document;
	}
	
	
	public static void main(String[] args) throws Exception {
//		String path = XmlUtilW.class.getClassLoader().getResource("employee.xml").getPath();
		XmlUtilW xmlUtil = new XmlUtilW();
		
		//找出一个emp
//		Employee employee1 = xmlUtil.findById(1);
//		System.out.println(employee1.getId()+","+employee1.getName()+","+employee1.getAge());
//		System.out.println("---------");
		
//		读取xml的所有emp
//		List<Employee> emps = xmlUtil.readXml();
//		for (Employee employee : emps) {
//			System.out.println(employee.getId()+","+employee.getName()+","+employee.getAge());
//		}
			
//		删除一个emp
//		xmlUtil.deleteXml(3);
		
		
//		修改一个emp
//		xmlUtil.updateXml(emp);
		
		Employee emp = new Employee();
		emp.setId(4);
		emp.setAge(22);
		emp.setName("abc");
//		写入一个emp
		xmlUtil.writeXml(emp);
		
	}
}

 

可以处理非常复杂的xml,带节点保存,如节点a下的节点b下的name,调用可用map.get("a").get("b").get("name")如:{ "sectornum": "3", "ReturnResult": "0", "containers": { "container": [ { "shelfhight": "0.086", "cardinfos": { "cardinfo": [ { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框3槽(0)HECM" }, { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框3槽(10)FAN" }, { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框3槽(9)UPEU" }, { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框3槽(7)CMPT" }, { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框3槽(2)HCPM" } ] } }, { "shelfhight": "0.308", "cardinfos": { "cardinfo": [ { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框1槽(2)CRFU" }, { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框1槽(4)CRFU" }, { "cardname": "290.蓝田局华胥电信营业厅CDMA基站/BTS529/架1列1/框1槽(0)CRFU" } ] } }, { "shelfhight": "0.086" }, { "shelfhight": "0.044" } ] }, "rackname": "HW401C", "asset": { "comments": "", "buydate": "", "assetcardno": "B", "category": "" }, "barcode": "", "version": "", "entity": { "entitycode": "LTJHXYYCX01/XA-HWMACBTS529", "installaddress": "", "entityspec": "BTS", "entityname": "蓝田局华胥电信营业厅CDMA基站/BTS529", "entityid": "901061314", "model": "HUAWEI BTS3900", "vendorname": "HuaWei" }, "ReturnInfo": "成功" }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值