本文主要是介绍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>的两对尖括号的形式.....
这篇关于DOM解析XML文件(修改属性,增加节点)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!