XML(二):两种解析方式

3 篇文章 0 订阅

SAX解析:

特点:

基于事件处理机制的解析(sax)
(1)边读边解析
(2)不能回读,如果遇到未处理的事件,要重新读取
(3)轻量级,速度快
(4)适合处理较大的xml文档
(5)只能读取,不能修改

代码:

    SAXParserFactory  创建SaxparserFacory工厂:这个工厂是用来产生SAXParser实例
	SAXParser  sax解析器
	parse(File f, HandlerBase hb);
	DefaultHandler   默认的处理类   需要写一个类继承它

	默认处理类中常用方法:
	1, startDocument();   这个方法只是在解析xml的时候执行一次
	2, endDocument();	   解析xml结束时调用,只调用一次
	//	遇到开始标签调用该方法,调用n次
	3, startElement(String uri, String localName, String qName,Attributes attributes)
	      uri:指向一个唯一的地址  一般不使用
	      localName  加上命名空间的名字,如果没有设置命名空间,值为null
	      qName:当前标签名
	      attributes:封装了开始标签中属性的信息
	      attributes.getQName(i);拿到第几个属性的属性名
	      attributes.getValue(i);拿到第几个属性的属性值
	      attributes.getLength();该标签属性的个数
	4, endElement();遇到结束标签的时候调用
	5, characters(char[] ch, int start, int length);遇到文本域的时候执行该方法

DOM解析:

特点:

基于树形结构的解析(dom)
(1)先将整个xml文档加载到内存,形成树形结构,再解析
(2)可以重复读取
(3)重量级,速度慢
(4)适合处理较小的xml文档
(5)能够进行增、删、改、查

代码:

    javax.xml.parsers.DocumentBuilderFactory;
	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();// 获取dom解析器工厂

	javax.xml.parsers.DocumentBuilder;
	DocumentBuilder build= factory.newDocumentBuilder();//获取dom解析器

	org.w3c.dom.Document;
	Document doc = build.parse(new File("src/com/briup/xml/sax/Test.xml"));解析xml文件;
	
	org.w3c.dom.Element;
	Element root = doc.getDocumentElement();// 获取根节点
	NodeList list = root.getElementsByTagName("time"); 拿多个time(元素)节点 取文本 相加 完成
	Element e = (Element)list.item(i);//获取第i号位上的 标签
	e.getNodeName()//获取标签名
	e.getTextContent()//获取标签中所有的文本值,在该标签下其他标签中的文本也会获取到
	
	NamedNodeMap att = node.getAttributes();//获取这个节点的所有属性
	Node n1=att.item(i);
	n1.getNodeName();拿到属性名
	n1.getNodeValue();拿到属性值

	Node child = node.getFirstChild();拿到该标签的第一个孩子
	String nv = child.getNodeValue();成功获取文本值

创建xml文件:

1.使用DOM方式创建students.xml 
	原则:就是使用Doc对象去创建各种Node,Attribute和createTextNode(),然后将节点append到相应的标签后面

	DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
	Document doc = builder.newDocument();//创建新doc对象
	主要使用的方法:
		Attr name =doc.createAttribute("属性名");
		name.setValue("属性值");
		标签.setAttributeNode(name);//给标签添加一个Attr对象

		标签.setAttribute("属性名","属性值");//给标签设置一个属性 key=value

		Element teacher=doc.createElement("标签名");//创建标签 现在只是单单创建了一个标签 没有追加到任何父标签后面
		Text hao=doc.createTextNode("文本值");//创建文本 同上
		父标签.appendChild(节点);//追加, 将文本或者标签追加到父标签下

	将创建的xml写到文件中 需要导入包:crimson.jar
	FileWriter fw = new FileWriter("src/teacher.xml");
	((XmlDocument)doc).write(fw);

2.使用Writer的方式直接写出去一个xml文件
	//1获得写出对象
	XMLStreamWriter writer = XMLOutputFactory.newFactory().createXMLStreamWriter(new FileOutputStream("src/aaa.xml"));
	常用方法:
		writer.writeStartDocument("utf-8", "1.0");//写xml的指令
		writer.writeEndDocument();//写结束指令
		writer.writeStartElement("students");//写一个开始标签
		writer.writeEndElement();//写一个结束标签
		writer.writeAttribute("one", "这个是一个单独的子标签");//写一个属性在上面的标签中
		writer.writeCharacters("文本 还是很好看的");//写一个文本
删除xml文件的节点:
	removeChild()
	removeAttribute(String name)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值