java DOM 对xml文件的操作【分别对节点、节点属性、节点内容增删改查】
2014-03-14 11:48
609 查看
最近研究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
相关文章推荐
- JavaWeb_01_Dom4j操作节点元素和属性的增删改查
- DOM文档操作和XML文件互相转换的java实现
- java 使用DOM4J对XML文件进行增删改查操作
- C# 用Linq的方式实现对Xml文件的基本操作(创建xml文件、增删改查xml文件节点信息)
- DOM下的节点属性和操作小结
- 黑马程序员_学习日记63_710jQuery2(属性选择器、表单选择器、操作Dom节点、事件、动画)
- Java操作XML文件 dom 篇
- C# 用Linq的方式实现对Xml文件的基本操作(创建xml文件、增删改查xml文件节点信息)
- Jquery中的DOM操作 (五.包裹节点和属性操作)
- JavaScript DOM_4 操作属性节点
- JavaScript 节点操作Dom属性和方法(转)
- C# 用Linq的方式实现对Xml文件的基本操作(创建xml文件、增删改查xml文件节点信息)
- Java如何获取xml文件中子节点的属性
- Java操作XML文件大合集(增删改查)
- java对xml节点属性的增删改查实现方法
- DOM自定义元素属性与节点的操作以及元素的创建
- Java操作XML文件 dom 篇
- java解析xml文件获取节点内容
- java中dom4j解析xml文件怎么获取节点属性
- java对XML文件的解析、节点的增加、删除操作总结