永发信息网

如何解析XML文件

答案:1  悬赏:20  手机版
解决时间 2021-02-18 04:58
如何解析XML文件
最佳答案
1)DOM(JAXP Crimson解析器) 
        DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。
2)SAX
        SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 
   选择DOM还是选择SAX? 对于需要自己编写代码来处理XML文档的开发人员来说,  选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。 
  DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。 
  SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。
xml文件:  
   
  
     
       A1  
       GZ  
   
  
     
       A2  
       XG  
  
  
  
  
1)DOM  
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();   
}  
  
2)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);}  
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
平谷哪个理发店经济实惠还手艺好
青钢居是小产权房吗
小品的格式是什么样的?最好有例子。 艺考用
李先生辽宁辽阳安平餐厅怎么去啊,有知道地址
南京医院医保报销比例是多少
gmail过滤器设置的自动回复无效是怎么回事?
普兰店区城乡规划建设局怎么去啊,有知道地址
用什么东西能使皮肤瘙痒
鹿晗的演唱会在哪里可以看得到?
韩国女歌手和权志龙风格很像,叫什么名字?
金诚玻璃地址在什么地方,想过去办事
沈阳权圣装饰工程有限公司的营业执照外地能经
多少城里的月光留在无眠的晚上 是什么歌
徒手倒立需要哪些力量
某商店为促销某品牌空调,2012年元旦购买可分
推荐资讯
奇瑞风云2加大油时有顿挫感的原因
呼延赞 杨继业 穆羽 谁厉害?
螺杆式空压机与活塞空压机的产气质量的比较?
洪冰瑶为什么叫“洪十四”?
求从视听语言方面写一篇《风语者》影评。多谢
中卫市沙坡头区驾照科目一在那考
嘉旺苑4号在哪里啊,我有事要去这个地方
补写出下列名篇名句中的空缺部分。(任选3题
歌华以前留的标清盒子,重开说卡过期了,只能
平方根定义,表示法和性质,算数平方根定义和表
风情眼镜地址在什么地方,想过去办事
国珍形象代言人是谁?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?