XML的基本用法

一、概述

  XML全称为可扩展的标记语言。主要用于描述数据和用作配置文件。

  XML文档在逻辑上主要由一下5个部分组成:

  XML文档的根元素被称为文档元素,它和在其外部出现的处理指令、注释等作为文档实体的子节点,根元素本身和其内部的子元素也是一棵树。

二、XML文档解析

  在解析XML文档时,通常是利用现有的XML解析器对XML文档进行分析,应用程序通过解析器提供的API接口得到XML数据。

  XML解析方式分为两种:DOM和SAX:

  DOM:用来解析相对较小的XML文件,容易增删改查。DOM的核心是节点,DOM在解析XML文档时,将组成文档的各个部分映射为一个对象,这个对象就叫做节点。使用DOM解析XML文档,需要将读入整个XML文档,然后在内存中创建DOM树,生成DOM树上的每个节点对象。

<?xml version="1.0" encoding="UTF-8"?><书架><书><作者>李阳</作者><价格>39元</价格><出版社>高等教育出版社</出版社></书><书><作者>宋吉</作者><价格>40元</价格><出版社>人民出版社</出版社></书></书架>

使用DOM解析上述XML文档,代码如下:

package com.test.xml;import java.io.File;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class Demo{public static void main(String args[]){//得到DOM解析器工厂类的实例DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();try{//得到dom的解析器对象DocumentBuilder db=dbf.newDocumentBuilder();//解析XML文档,得到代表文档的document对象File file=new File("D:\\Eclipse\\workSpace\\day_050401\\src\\book.xml");Document doc=db.parse(file);//以文档顺序返回标签名字为书的所有后代元素NodeList nl=doc.getElementsByTagName("书");for(int i=0;i<nl.getLength();i++){Element elt=(Element) nl.item(i);Node eltAuthor=elt.getElementsByTagName("作者").item(0);Node eltPricer=elt.getElementsByTagName("价格").item(0);Node eltPublish=elt.getElementsByTagName("出版社").item(0);String Author=eltAuthor.getFirstChild().getNodeValue();String Pricer=eltPricer.getFirstChild().getNodeValue();String Publish=eltPublish.getFirstChild().getNodeValue();System.out.println("——-书籍信息"+(i+1)+"——-");System.out.println("作者:"+Author);System.out.println("价格:"+Pricer);System.out.println("出版社:"+Publish);}}catch (ParserConfigurationException e){// TODO 自动生成的 catch 块e.printStackTrace();}catch (SAXException e){// TODO 自动生成的 catch 块e.printStackTrace();} catch (IOException e){// TODO 自动生成的 catch 块e.printStackTrace();}}}

  执行结果如下: 

 

  SAX:内存消耗较小,适合读取操作。SAX是一种基于事件驱动的API,利用SAX解析XML文档涉及解析器和事件处理器两个部分。解析器负责读取XML文档,并向事件处理器发送事件,事件处理器则负责对事件作出相应,对传递的XML数据进行处理。

  使用SAX解析XML文档,代码如下:

import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;class Book{private String name;private String author;private String price;public String getName(){return name;}public void setName(String name){this.name = name;}public String getAuthor(){return author;}public void setAuthor(String author){this.author = author;}public String getPrice(){return price;}public void setPrice(String price){this.price = price;}}public class Demo extends DefaultHandler{private List list=new ArrayList();private String currentTag;private Book book;@Overridepublic void startElement(String uri, String localName, String name,Attributes attributes) throws SAXException{currentTag=name;if("书".equals(currentTag)){book=new Book();}}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException{if("出版社".equals(currentTag)){String name=new String(ch,start,length);book.setName(name);}if("作者".equals(currentTag)){String author=new String(ch,start,length);book.setAuthor(author);}if("价格".equals(currentTag)){String price=new String(ch,start,length);book.setPrice(price);}}@Overridepublic void endElement(String uri, String localName, String name)throws SAXException{if(name.equals("书")){list.add(book);book=null;}currentTag=null;}public List getBooks(){return list;}public static void main(String []args){//1.创建解析工厂SAXParserFactory factory=SAXParserFactory.newInstance();SAXParser sp=null;try{//2.得到解析器sp=factory.newSAXParser();//3、得到读取器XMLReader reader=sp.getXMLReader();File file=new File("D:\\Eclipse\\workSpace\\day_050401\\src\\book.xml");//4.设置内容处理器Demo handle=new Demo();//reader.setContentHandler(handle);sp.parse(file,handle);//5.读取xml文档内容List<Book> list=handle.getBooks();for(int i=0;i<list.size();i++)System.out.println(list.get(i).getAuthor()+"—-"+list.get(i).getName()+"—–"+list.get(i).getPrice());}catch (ParserConfigurationException e){// TODO 自动生成的 catch 块e.printStackTrace();}catch (SAXException e){// TODO 自动生成的 catch 块e.printStackTrace();}catch (IOException e){// TODO 自动生成的 catch 块e.printStackTrace();}}}

  运行结果如下:

三、dom4j解析XML文档

  dom4j也是一种用于解析XML文档的开放源代码的Java库。下载地址。

  使用dom4j进行读取XMl文档操作,代码如下:

每一幢房子都有一种不同的颜色,

XML的基本用法

相关文章:

你感兴趣的文章:

标签云: