JAVA中的XML处理(一) 通过JAXP操作XML

1.JAVA处理XML的文件接口

    对XML数据文件操作的接口,目前存在2类标准:DOM & SAX。DOM将xml数据文件作为整体来处理,SAX将XML作为数据流来处理。

    除上述2类标准外还有很多非标准的XML操作接口:JDOM、DOM4J等。这些接口或模块与标准的DOM不兼容,但由于其易用性,在java开发群体中有着十分广泛的应用。

 

1.1 DOM标准

    DOM是一种操作XML数据文件最广泛的标准,独立于特定的语言和平台。很多XML解析器都实现DOM接口标准。DOM标准最基本的思想是将整个XML数据文件载入内存,将其解析成一颗树形对象。因而基于DOM的处理器内存要求比较高,但速度较快。

    DOM标准由W3C负责维持,http://www.w3c.org网上有最新的DOM标准规范文件。

1.2 SAX标准

    该标准是读一部分数据,再处理一部分数据。该接口通常是基于时间的,其将XML数据文件中不同的内容归类为不同对象。当SAX处理器分析到不同的对象时,就产生不同的事件,进而调用不同的事件处理器。

 

1.3 JAXP规范

    JAXP是SUN公司提出的一种JAVA操作XML的 标准。JAXP的作用是在JAVA应用程序和具体解析器之间提供一个统一编程接口,从而提高JAVA应用程序的可移植性。JAXP只是规范了JAVA应用程序获取DOM或SAX接口的方式,规范了JAVA应用程序加载XML解析器的方式。JAXP本身只是一个JAVA的接口框架。

 

2、使用JAXP操作XML

2.1 通过JAXP以DOM方式操作XML

import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.parsers.*;
import java.io.*;

public class Test {
	public static void main(String args[]) {
		try{
			String path = "xml";
			DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
			//使不支持合法性验证


			domFactory.setValidating(false);
			//使支持名称空间
			domFactory.setNamespaceAware(true);

			//新建DocumentBuilder 对象
			DocumentBuilder domBuilder = domFactory.newDocumentBuilder();
			
			//通过DocumentBuilder 对象将XML解析成一个DOM的Document对象
			Document document = domBuilder.parse(new File(path));
			//获得第一个子节点(此处为根节点)
			Node mynode = document.getFirstChild();
			int nodeType = mynode.getNodeType();
			
			String nodeName = mynode.getNodeName();
			String nodeValue = mynode.getNodeValue();
			System.out.println(nodeType);
			System.out.println(nodeName);
			System.out.println(nodeValue);
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}

}

 

   以上使用的是JDK自带的Xerces解析器,作为结果程序中没有任何和Xerces相关的代码,这是JAXP模块的最大的优点----隐藏了具体XML解析器的调用细节,使用户代码独立于特定的解析器,并可以在不同的解析器之间进行切换。

 

2.2 通过JAXP以SAX方式操作XML

 import java.io.IOException;
  import javax.xml.parsers.*;
  import org.xml.sax.Attributes;
  import org.xml.sax.SAXException;
  import org.xml.sax.helpers.DefaultHandler;
  /**
  *
  * date 12008-12-16
  * SAX解析XML文件
  * 优点,简单
  *
  */
  public class SAXtoMyxml {
  public static void main(String[] args) throws ParserConfigurationException,
  SAXException, IOException {
  // 通过工厂获得SAX解析器
  SAXParserFactory sf = SAXParserFactory.newInstance();
  SAXParser sax = sf.newSAXParser();
  //解析器
  // 通过解析器解析xml文件
  sax.parse("myxml1.xml", new SAXHander()); //使用自定义的监听器
  }
  }
  // 自定义sax解析监听器
  class SAXHander extends DefaultHandler {
  public void startDocument() throws SAXException {
  System.out.println("文档开始 ");
  }
  public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
  System.out.println("元素开始 "+qName);
  }
  public void characters(char[] ch, int start, int length) throws SAXException {
  String text = new String(ch,start,length);
  //去掉xml文件中的空格节点
  if(text.trim().equals("")) {
  return;
  }
  System.out.println("文本内容 "+text);
  }
  public void endElement(String uri, String localName, String qName) throws SAXException {
  System.out.println("元素结束 "+qName);
  }
  public void endDocument() throws SAXException {
  System.out.println("文档结束 ");
  }
  } 

 

 

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值