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)测试类省略
- Java--Dom解析XML文件
- java DOM解析XML文件
- Java DOM解析XML文件
- Java 解析 XML 文件之 DOM 解析
- JAVA解析XML文件之DOM解析
- java 运用dom解析xml文件之一.
- java用dom解析xml文件心得
- 利用java Dom解析XML文件
- 利用java的Dom解析XML文件
- JAVA语言利用DOM解析XML文件
- Java使用DOM解析XML文件
- 运用java读取xml文件---DOM 解析
- java使用DOM解析XML文件
- Java之DOM方式解析XML文件
- Java解析XML文件方法之一(DOM)
- Java——DOM解析XML文件
- Java中的Xml文件解析(DOM)
- Java之DOM解析XML文件
- *[Lintcode]Segment Tree Build II
- 网络代理种类
- cryptico.js使用
- 欢迎使用CSDN-markdown编辑器
- 排序方法比较
- Java DOM解析XML文件
- glew,glfw实现最新的opengl-学习笔记4实现纹理
- PostgreSQL之dblink使用
- 线性回归——最小二乘求解
- 简单使用web服务
- 看了这篇博客我才知道我好像不太懂C和Cpp
- 指针 内存应用
- 整数n的二进制形式中1的个数
- CoreStore 问题记录