XML解析——DOM
来源:互联网 发布:装配线排程算法 编辑:程序博客网 时间:2024/06/07 02:56
- DOM(Document Object Model)
DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。
【优点】
①允许应用程序对数据和结构做出更改。
②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据。
③基于树结构,比较耗资源,适用于多次访问XML。
【缺点】
①通常需要加载整个XML文档来构造层次结构,消耗资源大。
2.DOM读取XML的步骤:
1、创建解析器工厂对象
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
2、由解析器工厂对象创建解析器对象
DocumentBuilder db=dbf.newDocumentBuilder();
3、由解析器对象对指定的XML文件进行解析,构建相应的DOM树,创建Document对象。
Document document=db.parse(“XML文件路径”);
3.对XML文件进行查询,修改和删除。
1、查询。(对TEXT_NODE类型的节点,输出其text) 方法: print(document);
public static void print(Node n) { //把document转为Node型 //获取所有的孩子节点 NodeList nl = n.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { Node node = nl.item(i); //判断是否为TEXT_NODE类型,true 的话就继续判断 if (node.getNodeType() == Node.TEXT_NODE) { //XML中换行空格也是一种节点,需要把他们去掉,要不然输出时会有很多空格 if (!"".equals(node.getTextContent().trim())) { //打印文本 System.out.println(node.getTextContent()); } } else { //不是TEXT_NODE类型,则进行递归判断,直到打印出所有的TEXT_NODE类型 print(node); } } }
2、更新节点 update(Node node);
1.先找到你所要改的节点:
Node n1= doc.getElementsByTagName(“student”).item(0);//如,我要找所有student的节点的 第一个student,把它当参数穿进去。
public static void update(Node node) { //判断是ELEMENT_NODE类型的结点, if (node.getNodeType() == Node.ELEMENT_NODE) { //Node转换为子类Element,有更多的方法 Element element = (Element) node; //设置属性 element.setAttribute("address", "北京"); //得到子节点name中的第一个(因为一个student中,其实可以设置很多个<name>标签,我们这只有一个,所以取其第一个) Element name = (Element) element.getElementsByTagName("name").item(0); //设置文本 name.setTextContent("奥巴马"); } }
3、删除节点 remove(Document doc);
public static void remove(Document doc) { //获取第2个student ,删除它 Element e = (Element) doc.getElementsByTagName("student").item(2); //先获取它的父节点,再通过父节点删除自己(自己不能删除自己) e.getParentNode().removeChild(e); }
4、新增节点 add(Document doc);
public static void add(Document doc) throws Exception { // 先找到跟元素,因为DOM是树状,的找到跟节点再去添加分支 Element root = (Element) doc.getElementsByTagName("students").item(0); // 创建一个student Element student = doc.createElement("student"); // 设置属性 student.setAttribute("address", "长沙"); // 创建ID name course scores Element ID = doc.createElement("id"); ID.setTextContent("3"); Element name = doc.createElement("name"); name.setTextContent("瑞文"); Element course = doc.createElement("course"); course.setTextContent("英雄联盟"); Element scores = doc.createElement("scores"); scores.setTextContent("120"); // 把它们都加到student里面去 student.appendChild(ID); student.appendChild(name); student.appendChild(course); student.appendChild(scores); // 再把student 加到root 下面 root.appendChild(student); // 把他写入XML文档 transformTo(doc); }
5、以上的操作都是把XML读入内存里面,在内存里面进行修改,而我们就要把我们修改后的内存里面的XML 写入到实际的(硬盘)的XML中。 transformTo(Document doc);
public static void transformTo(Document doc) throws Exception { // 同样的得到转换工厂 TransformerFactory factory = TransformerFactory.newInstance(); //获得其实例 Transformer transformer = factory.newTransformer(); //这个是用来限制格式的,但是你的XML文件就要有一个DTD 文件,在文件写入时,会按照你的DTD文件的格式来,而不会全部都挤在一行 transformer.setOutputProperty(javax.xml.transform.OutputKeys.DOCTYPE_SYSTEM, doc.getDoctype().getSystemId()); //2个参数,第一个是源,即你的document,第二个是输出流,指向你的XML文件路径。也可以查API transformer.transform(new DOMSource(doc), new StreamResult("20160829/students.xml")); }
0 0
- XML解析——DOM
- android—DOM解析xml
- 【XML】DOM—JAXP 解析
- XML——XML解析之DOM
- Java解析xml——Dom解析
- Java解析XML文档——dom解析xml
- Java解析XML文档——dom解析xml
- Java解析XML文档——dom解析xml
- Java解析XML文档——dom解析xml
- Java解析XML文档——dom解析xml
- 解析XML——DOM、Pull、SAX
- XML解析器——DOM
- Android XML解析技术——DOM
- 慕课网——DOM解析XML
- Java——DOM解析XML文件
- XML——DOM解析案例
- XML解析——DOM方式
- Java——DOM解析XML
- Json字符串生成与解析
- .a库的制作(合并真机和模拟器的方法)
- android studio git/github配置
- mysql explain各列的含义
- 《Drools6.4 中文文档》第1章1.1~1.2(完)
- XML解析——DOM
- 华为机试题:有10个整数,使前面格数顺序向后移m个位置,最后m个数变成最前面m个数。计算移动后的整数序列的前m个数和后m个数的和。
- AOE
- hdu-1796-How many integers can you find(容斥)
- 通俗理解并发和并行的区别
- ORACLE连接服务器失败,无法使用oci连接其它电脑的 ORACLE服务器等,oci 接口c++封装。
- delete the element of array
- open函数和fopen函数的区别
- ajax+js省市联动