加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml文件的读写

发布时间:2020-12-16 00:31:12 所属栏目:百科 来源:网络整理
导读:1,xml文件的读取 读取xml文件的方式有两种,一种是面向模型的DOM方式,一种是面向事件的SAX方式 DOM方式原理 :一次性的将xml文档加入内存,在内存中形成一颗dom树,然后通过语言对树的节点进行操作。 显然这种操作查找元素快,但是一次性的将文件加载进来

1,xml文件的读取

读取xml文件的方式有两种,一种是面向模型的DOM方式,一种是面向事件的SAX方式


DOM方式原理:一次性的将xml文档加入内存,在内存中形成一颗dom树,然后通过语言对树的节点进行操作。

显然这种操作查找元素快,但是一次性的将文件加载进来,要是小还行,文件大的时候会增大内存负担的,因此这种方式最好是解析小的xml文件的时候用


SAX方式原理:边读边解析,按照从做往右从上往下的顺序解析。

由于解析过的节点不能再次利用,要想使用还得再次解析,所以效率相对来说比较低,但只有事件触发了才会去读取文件,所以内存不会很大。

两种方式,各有优缺点,谁也不能代替谁,举个简单的例子吧,就像生活中的自行车无法取代汽车,汽车无法取代自行车一样,两者各有优势。根据具体需求选择。


DOM实现

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;


public class dom{
	public static void main(String args[])throws Exception{
		//创建文件解析工厂
		DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();


		//使用工厂创建文件解析类
		DocumentBuilder builder = dfactory.newDocumentBuilder();


		//开始解析文件,将文件加载进内存,形成dom树
		Document document = builder.parse(new File("test.xml"));
		
		
		//获取根节点并打印出来
		Node rootn = document.getFirstChild();
		System.out.println(rootn.getNodeName());
	}
}




SAX实现:

import java.io.File;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


public class sax{
	public static void main(String args[])throws Exception{
		//创建解析对象
		SAXReader reader = new SAXReader();


		//读取xml文件
		Document document = reader.read(new File("test.xml"));


		//获取根节点
		Element roote = document.getRootElement();
		//获取根节点下面的子节点
		String childe = roote.elementText("学生");
		System.out.println(roote.getName());
		System.out.println(childe);
	}
}



注意:需要导入dom4j的jar包,如果不使用工具需要配置classpath环境变量才能使用jar。
如果有多个学生标签,会返回第一个标签的内容。

SAX实现+xpath

package com.bjpowernode.xml;


import java.io.File;


import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class SAXandxpath {
	public static void main(String[] args) throws Exception{
		
		SAXReader reader = new SAXReader();
		Document document = reader.read(new File("test.xml"));
		String xpath = "/test/学生";
		Element element = (Element)document.selectSingleNode(xpath);
		System.out.println(element.getText());
	}
}

使用xpath达到快速定位的效果。使用时需要导入相应的jar包




2,xml文件的写入

Dom方式:使用dom方式写入xml文件(基于dom4j)

import java.io.FileWriter;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;


public class domwrite{
	public static void main(String args[])throws Exception{
		//创建一个文档对象
		Document document  = DocumentHelper.createDocument();


		//构造dom树
		Element roote = document.addElement("学生信息");
		Element chile = roote.addElement("学生");
		chile.addAttribute("id","1");
		chile.setText("shuangzhe");
		Element chile1 = roote.addElement("学生");
		chile1.addAttribute("id","2");
		chile1.setText("litongxue");


		
		//设置字符编码方式
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("GB18030");


		//开始写
		XMLWriter xmlWriter = new XMLWriter(new FileWriter("student.xml"),format);
		xmlWriter.write(document);
		xmlWriter.close();
	}
}


写入后的文件内容

<?xml version="1.0" encoding="GB18030"?>
<学生信息>
  <学生 id="1">shuangzhe</学生>
  <学生 id="2">litongxue</学生>
</学生信息>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读