java的xml[extends market language]可扩展标记语言]技术
一、xml的概论
1.什么是XMl?
xml是扩展的标记语言。是关于异构的语言(可以在多语言之间进行数据的交互).
促使结构可以已得以扩展。
2.为何使用xml?
1..之所以使用,因为xml简洁高效。能够使用纯文本的形式表现各种复杂的有层次的数据及其之间的交互。
2..易于在各个平台上构造和解析(parse)
3.xml在数据交换结构化数据存储与显示、内容呈现与显示格式分离
二、解析XML的方式?以及各自是如何进行解析XMl?
所谓解析就是读取文档并将文档分解为能够分析的元素的过程。
XMl解析包括验证和不验证解析。解析器基于DOM和SAX两种API.
在java语言中,解析XML的方式有:Dom(文档对象模型)与SAX.
1.Dom是基于树结构解析
2.SAX是事件驱动的解析。
一、使用Dom解析XML的步骤:
1.构建一个DocumentBuilderFactory示例,并使用示例构建DocumentBuilder
2.DocumentBuilder构建Document.
3.使用DocumentBuilder.parse(new File(fileName))方法进行解析
见示例:
Document doc =null;
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance() ;
try {
//需要解析的XML文件名
String fileName="src/dep.xml";
//构建一个DocumentBuilderFactory示例,并使用示例构建DocumentBuilder
DocumentBuilder dcb = dbf.newDocumentBuilder()DocumentBuilder;
//将需要解析的文件交给DocumentBuilder解析
doc=dcb.parse(new File(fileName));
NodeList nl=doc.getElementsByTagName_r("Student");
for(int i=0;i<nl.getLength();i++){
Node n=nl.item(i);
//获取节点的名字
System.out.println(n.getNodeName());
//获取文本节点的内容
System.out.println(n.getTextContent());
//获取节点的值
// System.out.println(n.getNodeValue());
// System.out.println(n.getLocalName());
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
二、使用SAX解析XML
1. 创建SAX工厂解析
2. 获得解析器
3. 解析XML文档
示例:
public class SAXParseXML extends DefaultHandler{
public void startDocument()throws SAXException{
System.out.println("起始文档");
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
// super.characters(ch, start, length);
String charString=new String(ch, start, length);
System.out.println(charString);
}
@Override
public void endDocument() throws SAXException {
System.out.println("结束文档");
}
@Override
public void endElement(String namespaceURI, String localName, String qname)
throws SAXException {
System.out.println("结束元素"+qname);
}
@Override
public void startElement(String namespaceURI, String localName, String qname,
Attributes atts) throws SAXException {
// TODO Auto-generated method stub
System.out.println("起始元素"+qname);
for(int i=0;i<atts.getLength();i++){
System.out.println("属性值:"+atts.getValue(i));
}
}
//创建SAX工厂解析
SAXParserFactory factory=SAXParserFactory.newInstance();
try {
//获得解析器
SAXParser parse =factory.newSAXParser();
//解析XML文档
parse.parse("src/dep.xml", new SAXParseXML());
} catch (Exception e) {
e.printStackTrace();
}
SAX解析的XML处理器不创建数据结构,而是扫描输入XML文档,并生成元素开始、结束等事件,发生事件时候,
解析器会采用回调机制通知应用程序。
三、说出SAX与DOM解析XML的区别以及优缺点?
1.从效率来讲,因为SAX不创建显示的数据结构,所以效率高于DOM.DOM对数据量大的文档进行操作会消耗大量内存。
2.从适用情形讲,在解析大型文档时,不必把整个文档加载到内存中,所以占用内存比DOM少。
DOM
1.可读可写。
2.可以操纵、访问、创建xml文档的内部结构。
3.基于对象,与语言和平台无关。客户端可以随机会访问,XML文档被作为对象的体系结构排列进行解析和存储。
缺点:对数据量大的文档会消耗大量内存。
SAX
优点:效率高,占用内存少。
缺点:1.SAX只读不写,只解析XML文档的内容不能写入。只能遍历一次。