Java DOM解析XML文件

来源:互联网 发布:tensorflow 多gpu 编辑:程序博客网 时间:2024/05/22 00:32

一、使用DOM解析XML主要使用的对象

        1、    Document  代表整个XML文档
                getElementsByTagName(String name) 通过标签获得节点列表
                getDocumentElement( )  获得根节点

                 createElement() 创建元素

                createAttribute() 创建属性

               createTextNode()  创建文本节点值

                 removeChild() 删除节点

        2、  NodeList 指包含了一个或者多个节点(Node)的列表
                  item(int index) 遍历每一项

        3、 Element    代表XML文档中的标签
               getAttribute(String attributename)   获得属性

               setAttribute(String attributename)   设置属性

        4、Node是DOM 结构中最基本的对象,代表了文档树中的一个抽象节点
                 getChildNodes( ) 获得当前节点的孩子
                getNodeName( )  获得节点的名称
                getNodeValue( )  获得节点的文本值

               getFirstChild() 获得节点的第一个孩子


二、使用DOM解析XML的具体操作(CRUD)

      stu.xml文件

<?xml version="1.0" encoding="utf-8" standalone="no"?><students><student id="java1401"><name>zal</name><age>22</age></student><student id="java1402"><name>吴晟</name><age>22</age></student><student id="java1403"><name>沈彦</name><age>21</age></student><student id="QQ1334"><name>mike</name><age>12</age></student></students>

     1)实体类省略 

     2)业务类

package com.hlx.dom;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Attr;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;import org.w3c.dom.Text;import org.xml.sax.SAXException;public class StudentBiz {/** * 1.获得文档对象 *  * @param name *            xml文件 * @return */public Document getDocument(String name) {// 1.创建解析器工厂对象DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();// 2.由解析器工厂对象创建解析器对象try {DocumentBuilder db = factory.newDocumentBuilder();// 3.由解析器对象对指定XML文件进行解析Document document = db.parse(name);return document;} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}/** * 2.解析文档 XML *  * @param name */public void parseXMl(String name) {// 1.获得文档对象Document document = getDocument(name);// 通过student的标签获得具体的孩子NodeList list = document.getElementsByTagName("student");// 遍历数据System.out.println("学号\t\t姓名 \t年龄");for (int i = 0; i < list.getLength(); i++) {// buffer对象StringBuffer buffer = new StringBuffer();// 获得元素Element element = (Element) list.item(i);// 追加数据 --属性buffer.append(element.getAttribute("id") + "\t");// 追加数据 --元素 getFirstChild()buffer.append(document.getElementsByTagName("name").item(i).getFirstChild().getNodeValue()+ "\t");buffer.append(document.getElementsByTagName("age").item(i).getFirstChild().getNodeValue());// 输出信息System.out.println(buffer.toString());}}public void add(String name, Student stu) {// 1.获得文档对象Document document = getDocument(name);// 2.创建student,name,age元素// <student></student>Element studentEle = document.createElement("student");// <name></name>Element nameEle = document.createElement("name");// <age></age>Element ageEle = document.createElement("age");// 3.创建属性 idAttr idAttr = document.createAttribute("id");// 给id赋值idAttr.setNodeValue(stu.getId());// 4.文本值 沈彦Text txtName = document.createTextNode(stu.getName());// 21Text txtAge = document.createTextNode(stu.getAge() + "");// 5.将文本值追加到具体的元素上name,agenameEle.appendChild(txtName);ageEle.appendChild(txtAge);// 6.将name,age追加到studentstudentEle.appendChild(nameEle);studentEle.appendChild(ageEle);// 7.将属性追加到studentstudentEle.setAttributeNode(idAttr);// 8.将student追加到根节点下studentsElement root = document.getDocumentElement();root.appendChild(studentEle);// 9.写入xml文件saveToXml(name, document);System.out.println("添加成功!");}/** * 写入XML文件中 *  * @param name * @param document */public void saveToXml(String name, Document document) {// 1.首先创建转化工厂TransformerFactory factory = TransformerFactory.newInstance();// 2.创建Transformer,它能够将源树转换为结果树try {Transformer former = factory.newTransformer();// 设置输出样式-->不在同一行former.setOutputProperty("indent", "yes");// 3.文档xmlDOMSource source = new DOMSource(document);// 4.结果 : name=stu.xmlStreamResult result = new StreamResult(new FileOutputStream(new File(name)));// 5.保存// 执行将XML Source转换为 Resultformer.transform(source, result);} catch (TransformerConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (TransformerException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** * 删除XML文件中的某一个数据 *  * @param string * @param student */public void del(String name, Student student) {// 1.获得文档对象Document document = getDocument(name);// 2.获得student节点NodeList list = document.getElementsByTagName("student");// 3.遍历for (int i = 0; i < list.getLength(); i++) {// 获得每一个元素studentElement element = (Element) list.item(i);// 判断 属性if (element.getAttribute("id").equals(student.getId())) {// 找到就删除document.getDocumentElement().removeChild(element);// 退出循环break;}}// 9.写入xml文件saveToXml(name, document);System.out.println("删除成功!");}/** * 修改数据 *  * @param string * @param stu1 */public void update(String name, Student student) {// 1.获得文档对象Document document = getDocument(name);// 2.获得student节点NodeList list = document.getElementsByTagName("student");// 3.遍历for (int i = 0; i < list.getLength(); i++) {// 获得每一个元素studentElement element = (Element) list.item(i);// 判断 属性if (element.getAttribute("id").equals(student.getId())) {// 找到就修改 name,ageelement.getElementsByTagName("name").item(0).getFirstChild().setNodeValue(student.getName());element.getElementsByTagName("age").item(0).getFirstChild().setNodeValue(student.getAge()+"");// 退出循环break;}}// 9.写入xml文件saveToXml(name, document);System.out.println("修改成功!");}}

 

     3)测试类省略

  

0 0
原创粉丝点击