DOM解析XML文件(修改属性,增加节点)

前面用DOM解析XML只是对里面的数据读取出来,而DOM解析最大的优势并不是读取,而是可以方便的修改里面的元素。

接着上回的代码,在类中新建一个方法来进行XML文件的修改和增加节点操作。

DOM修改的原理是,DOM在读取XML文件时读入的是文件中所有的节点组成一个DOM树的Document文件,这个文件被读取出来之后我们用JAVA语言可以操作它,不过这样修改也仅仅是修改了JAVA中的这个对象而已,所有在我们将DOM文件修改完了之后还要进行保存工作,这样才是真正的做到了修改XML文件。

原来的XML文档:

<?xml version="1.0" encoding="utf-8"?>
<student>
	<stu num="1111">
		<name>张三丰</name>
		<sex>男</sex>
		<cla>武当</cla>
	</stu>
	<stu num="2345">
		<name>小龙女</name>
		<sex>女</sex>
		<cla>古墓</cla>
	</stu>
	
</student>

 

代码:

/**
	 * 修改XML文件
	 * @throws Exception 
	 */
	public static void changeXML(Document doc) throws Exception{
		//------------------------修改节点中元素的内容
		//找到要修改的节点名称的所有节点,得到名字相同的节点队列
		NodeList nodes = doc.getElementsByTagName("name");
		//在队列中选择要修改的节点
		Node n = nodes.item(0);
		//修改该节点的文本
		n.setTextContent("逗逼");
		
		//------------------------增加节点的子元素
		//找到要修改的节点名称的所有节点,得到名字相同的节点队列
		NodeList nodes1 = doc.getElementsByTagName("student");
		//在队列中选择要修改的节点
		Node n1 = nodes1.item(0);
		//创建要增加的节点元素
		Element nn = doc.createElement("stu");
		//设置节点属性
		Attr attr = doc.createAttribute("num");
		attr.setValue("6666");
		nn.setAttributeNode(attr);
		//增加新元素stu的子元素
		//姓名
		Element nn1 = doc.createElement("name");
		nn1.setTextContent("第三个");
		nn.appendChild(nn1);
		n1.appendChild(nn);
		//性别
		Element nn2 = doc.createElement("sex");
		nn2.setTextContent("第三个");
		nn.appendChild(nn2);
		n1.appendChild(nn);
		//班级
		Element nn3 = doc.createElement("cla");
		nn3.setTextContent("第三个");
		nn.appendChild(nn3);
		n1.appendChild(nn);
		
		System.out.println(doc.getElementsByTagName("stu").getLength());
		
		
		//-------------------------保存到文件中
		//创建一个用来转换DOM对象的工厂对象
		TransformerFactory factory = TransformerFactory.newInstance();
		//获得转换器对象
		Transformer t = factory.newTransformer();
		//定义要转换的源对象
		DOMSource xml = new DOMSource(doc);
		//定义要转换到的目标文件
		StreamResult s = new StreamResult(new File("D:\\xmlEX\\student4.xml"));
		//开始转换
		t.transform(xml, s);
		
		
	}

修改后的XML文档:

<?xml version="1.0" encoding="utf-8" standalone="no"?><student>
	<stu num="1111">
		<name>逗逼</name>
		<sex>男</sex>
		<cla>武当</cla>
	</stu>
	<stu num="2345">
		<name>小龙女</name>
		<sex>女</sex>
		<cla>古墓</cla>
	</stu>
	
	<stu num="6666">
		<name>第三个</name>
		<sex>第三个</sex>
		<cla>第三个</cla>
	</stu>
</student>

  

从这次的练习得出一个发现,如果直接给一个节点添加一个子节点stu,而且该子节点stu没有其他的子节点的话,那么这个stu在XML保存操作之后,会在文件中显示成<stu/>,只有当这个节点stu有子节点的时候,才会显示成<stu></stu>的两对尖括号的形式.....

展开阅读全文

没有更多推荐了,返回首页