xml的解析处理以及其他

原创 2005年04月28日 18:05:00

dom和SAX使两种主流的选择,还有JDOM,DOM4J做的不错。
  DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。
  例: import java.io.*;import java.util.*;import org.w3c.dom.*;import javax.xml.parsers.*;

  public class MyXMLReader{

  public static void main(String arge[]){

  long lasting =System.currentTimeMillis();

  try{

   File f=new File("data_10k.xml");

   DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

   DocumentBuilder builder=factory.newDocumentBuilder();

   Document doc = builder.parse(f);

   NodeList nl = doc.getElementsByTagName("VALUE");

   for (int i=0;i<nl.getLength();i++){

    System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());

    System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());

  }

  }catch(Exception e){

   e.printStackTrace();

  }
  SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。
 例: import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;

  public class MyXMLReader extends DefaultHandler {

  java.util.Stack tags = new java.util.Stack();

  public MyXMLReader() {

  super();}

  public static void main(String args[]) {

  long lasting = System.currentTimeMillis();

  try {

   SAXParserFactory sf = SAXParserFactory.newInstance();

   SAXParser sp = sf.newSAXParser();

   MyXMLReader reader = new MyXMLReader();

   sp.parse(new InputSource("data_10k.xml"), reader);

  } catch (Exception e) {

   e.printStackTrace();

  }

  System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");}

  public void characters(char ch[], int start, int length) throws SAXException {

  String tag = (String) tags.peek();

  if (tag.equals("NO")) {

   System.out.print("车牌号码:" + new String(ch, start, length));}if (tag.equals("ADDR")) {

  System.out.println("地址:" + new String(ch, start, length));}}

  public void startElement(String uri,String localName,String qName,Attributes attrs) {

  tags.push(qName);}}


注意:当xml数据的形式作为传递时,要获取一条条的纪录是比较适宜于采用dom,虽然它对系统(内存,性能等)有较高的要求,但是一般的服务器都可满足上G的xml文档的处理。
      当需要对xml的某些内容或某些节点的特定访问时,或需要一及时地事件相应时,可以用sax来处理。它是基于时间处理机制的,在编程时,通过重载一些事件方法,来获得对xml文档的处理。

有关xml的编码,InputStreamReader和xmlReader的关系:
  通常的DOM和SAX对于用ascii编码的文档,通过用InputStreamReader读入xml文档,后变成了unicode码,然后不能用
  XMlREader来处理,出现错误的原因是:遇到无效的unicode的字符。(当你用system.out.println()输出是没有任何问题,因为它能自动转成本地机的编码)。
  解决的方法:
  BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f),"ISO8859-1"));
  这样就可以限定它的编码,这样就没有问题。
String 的长度问题:String 类型安标准来说没有长度限制,但是一般jdk中String的最大长度是4G。
String与BufferedString关系:在不涉及到字符串有效的大量处理,通常使用String. BufferedString在处理字符串的大量处理上有优势

 
部分来自于:
http://blog.csdn.net/lamster/archive/2004/11/17/184286.aspx

requests get 请求解析xml

__author__ = 'USER' #encoding:UTF-8 ''' get请求返回的是xml文件 结对对xml的解析中存在中文的问题可以用requests中的content方法,以...
  • wangquan2596489
  • wangquan2596489
  • 2014年12月19日 10:59
  • 614

xml解析之sax解析原理图和技术介绍

SAX解析工具-  Sun公司提供的。内置在jdk中。org.xml.sax.*                                               核心的API:      ...
  • qq_32059827
  • qq_32059827
  • 2016年05月30日 22:26
  • 1220

c#(.Net)解析xml

//方法1             XmlDocument xmlDoc = new XmlDocument();             xmlDoc.LoadXml("11kkkk");     ...
  • lanshengsheng2012
  • lanshengsheng2012
  • 2014年03月17日 10:09
  • 11817

xml中字符的转义

  • zgqtxwd
  • zgqtxwd
  • 2008年04月25日 05:55
  • 494

JavaScript解析XML,js解析xml字符串

JavaScript解析XML,js解析xml字符串
  • github_36885144
  • github_36885144
  • 2016年12月06日 16:54
  • 6962

awk解析xml

?xml version="1.0"?> system> machine name="web01" > server name="log_collect"> ...
  • Chinamming
  • Chinamming
  • 2013年12月07日 01:25
  • 4611

SAX方式解析XML文档

SAX的特点这里不再赘述,仅用一实例说明SAX解析XML文档的方式与原理 1.SAX常用的接口    ContentHandler    该接口封装了一些对事件处理的方法,比如文档的开始和结束、元素的...
  • l081307114
  • l081307114
  • 2015年05月28日 15:54
  • 257

Go 解析XML

今天看了看XML的解析,挺别致的和C++,Java之类的解析很是不同。 GO中将XMl的结构解析成一个数据结构,类似于一个结构体。 package main import ( "encod...
  • king1076
  • king1076
  • 2013年11月12日 22:59
  • 1905

MySQL XML解析及數組處理

源碼: DROP PROCEDURE IF EXISTS `uspUpdateRoleHasRights`; DELIMITER // CREATE PROCEDURE `uspUpdateRole...
  • jungle0127
  • jungle0127
  • 2015年05月23日 23:57
  • 2507

Android中xml 解析三种方式的区别

SAX、DOM、PULL的比较 SAX、DOM、PULL各有自己的特点,具体操作XML的时候该如何选择呢? 1.内存占用 这是一个根本性问题。由于Android手机性能相对于现在的应用操作还是有...
  • skibug
  • skibug
  • 2015年08月19日 11:36
  • 2995
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:xml的解析处理以及其他
举报原因:
原因补充:

(最多只允许输入30个字)