java DOM 对xml文件的操作【分别对节点、节点属性、节点内容增删改查】

最近研究xml文件  但是书上仅仅是解析 自己有点不满意 于是在“度娘谷哥”的帮助下搜集了一些有关于DOM操作xml文件的资料 并整理下来 也有0分的源码供大家下载

DOM是W3C组织推广的一中操作xml文件的方法,也是java原生态操作xml文件的方法之一,DOM的优点就是操作xml文件简单,可以重复随便的增删改查,但是不足的是,在操作前需要把整个xml文件以树状图加载到内存中,这样的话会影响程序的运行效率,所以,小的xml文件用DOM才是不错的选择

被操作的xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<clazz>
    <student sn="01">
        <name>张三</name>
        <age>18</age>
    </student>
    <student sn="02">
        <name>李四</name>
        <age>20</age>
    </student>
    <student sn="03">
        <name>王五</name>
        <age>20</age>
    </student>
</clazz>


xml文件与项目的路径关系如下:


问题:
【节点的增、删、改、查】
1、在根节点下增加一个<student>节点,添加属性sn值为04,<student>节点下有<name>、<age>节点节点内容分别为name=赵六,age=21(节点的增加)
2、在根节点下找到属性sn为02的<student>节点,并输出该节点下的姓名,年龄(节点的查询)
3、在根节点下找到属性sn为03的<student>节点,并删除该节点(节点的删除)
4、在根节点下找到属性sn为01的<student>节点,并把<student>节点修改为<teacher>(节点的修改)
【节点属性的增、删、改、查】
1、在sn=01的节点上增加属性type=班长
2、删除sn=02的sn属性
3、修改sn=03的sn属性为05
4、查询......(上面的都用到了)
【节点内容的增、删、改、查】
(其中的增与删没必要,因为增加就是改,删除也是改,删除也可以直接删除节点,所以只有改和查有意义)
1、查询sn=01的同学姓名
2、修改sn=02的同学姓名为王二


1、获取Document对象:

Document就是xml文件的“树状图”,获取Document对象需要通过工厂类去获取,下面的方法会返回一个Document对像,

public Document createDocument(){
		
	Document document = null;
		
	try {
		DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
		FileInputStream  xmlInputStream = new FileInputStream("xmlFile/clazzXml.xml");
		DocumentBuilder builder = builderFactory.newDocumentBuilder();
			
		document = builder.parse(xmlInputStream);
			
	} catch (ParserConfigurationException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SAXException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
		
	return document;
		
}

2、获取根节点:

获取xml的根节点可以通过Document中的getDocumentElement()方法:

Element root = document.getDocumentElement();

3、遍历xml文件:

public void domXML(Document document){
		
	Element root = document.getDocumentElement();
	System.out.println("xml文件的根节点为:"+root.getNodeName());
	System.out.println();
	NodeList stuNodeList = root.getChildNodes();
		
	for(int i = 0;i < stuNodeList.getLength();i ++){
			
		Node stuInforNode = stuNodeList.item(i);
		if(stuInforNode.getNodeType() == Node.ELEMENT_NODE){
				
			NodeList stuNode = stuInforNode.getChildNodes();
			for(int j = 0;j < stuNode.getLength();j ++){
					
				Node stuNode2 = stuNode.item(j);
				if(stuNode2.getNodeName().equals("name")){
					System.out.println("姓名:"+stuNode2.getTextContent());
				}
				else if(stuNode2.getNodeName().equals("age")){
					System.out.println("年龄:"+stuNode2.getTextContent());
				}
				
			}
				
		}
			
	}
		
}


4、为指定节点下添加子节点:

//	1、在根节点下增加一个<student>节点,添加属性sn值为04,
//	<student>节点下有<name>、<age>节点节点内容分别为name=赵六,age=21(节点的增加)
	public void addElement(Document document){
		
		Element root = document.getDocumentElement();
		
		//解决问题步骤1、创建节点 创建属性 创建内容 2、写入内容 写入属性 写入节点
		//1、创建
		//创建students节点以及students下的name节点与age节点
		Element stuEle = document.createElement("student");
		Element nameEle = document.createElement("name");
		Element ageEle = document.createElement("age");
		//创建name与age内容
		Text nameText = document.createTextNode("赵六");
		Text ageText = document.createTextNode("21");
		//创建student节点属性sn=04
		Attr stuAttr = document.createAttribute("sn");
		stuAttr.setValue("04");
		
		//2、写入
		//写入属性
		stuEle.setAttributeNode(stuAttr);
		//把name、age写入student下
		stuEle.appendChild(nameEle);
		stuEle.appendChild(ageEle);
		//写入内容
		nameEle.appendChild(nameText);
		ageEle.appendChild(ageText);
		//把student写入根节点下
		root.appendChild(stuEle);
		
		
	}

该方法可以增加xml文件的节点 但是 程序执行后 打开xml文件 xml并没有改变 这好似因为我们并没有把修改过的xml重新写入到文件中 重新写入xml要使用Transformer对象

5、Transformer对象的获取 与保存修改过的xml文件

//保存xml文件
	public void saveXml(Document document){
		
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		try {
			Transformer transformer = transformerFactory.newTransformer();
			DOMSource domSource = new DOMSource(document);
			StreamResult streamResult = new StreamResult(new FileOutputStream("xmlFile/clazzXml.xml"));
		    
			transformer.transform(domSource, streamResult);
			
		} catch (TransformerConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (TransformerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

这样,加入修改过的Document对象 就会把修改过的xml文件保存


关于文章开头问题中剩下的操作请点击下面的连接下载源码

http://download.csdn.net/detail/yezis/7039201

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值