你的位置:首页 > Java教程

[Java教程]XML的基本用法


一、概述

  

  

  • 文档类型声明:指出
  • 元素:由开始标签、元素内容和结束标签构成
  • 注释:以<!--开始,以-->结束,用于对文档中的内容起一个说明作用
  • 处理指令:通过处理指令来通知其他应用程序来处理非

  

二、

   在解析

  

  DOM:用来解析相对较小的

<??><书架>  <书>    <作者>李阳</作者>    <价格>39元</价格>    <出版社>高等教育出版社</出版社>  </书>  <书>    <作者>宋吉</作者>    <价格>40元</价格>    <出版社>人民出版社</出版社>  </书></书架>

  使用DOM解析上述

package com.test.import java.io.File;import java.io.IOException;import javax.import javax.import javax.import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.public class Demo{  public static void main(String args[])  {    //得到DOM解析器工厂类的实例    DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();    try    {      //得到dom的解析器对象      DocumentBuilder db=dbf.newDocumentBuilder();      //解析      File file=new File("D:\\Eclipse\\workSpace\\day_050401\\src\\book.);      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解析

  使用SAX解析

import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.import javax.import javax.import org.import org.import org.import org.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;  @Override  public void startElement(String uri, String localName, String name,      Attributes attributes) throws SAXException  {    currentTag=name;    if("书".equals(currentTag))    {      book=new Book();    }  }  @Override  public 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);    }  }  @Override  public 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、得到读取器      sp.get=new File("D:\\Eclipse\\workSpace\\day_050401\\src\\book.);      //4.设置内容处理器      Demo handle=new Demo();      //reader.setContentHandler(handle);      sp.parse(file,handle);      //5.读取      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解析

  dom4j也是一种用于解析

  使用dom4j进行读取

import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.OutputStreamWriter;import java.security.KeyStore.Entry.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.import org.junit.Test;public class Demo{  //读取  @Test  public void read()  {     SAXReader reader = new SAXReader();     try    {      Document document = reader.read("C:\\Users\\Administrator\\Desktop\\book.);      Element root =document.getRootElement();      Element book=(Element)root.elements("书").get(1);      String value=book.element("出版社").getText();      System.out.println(value);    }     catch (DocumentException e)    {      // TODO 自动生成的 catch 块      e.printStackTrace();    }  }    //在第二本书上添加一个书名:<书名>平凡的世界</书名>  @Test  public void add() throws DocumentException, IOException  {    SAXReader reader = new SAXReader();    Document document = reader.read("C:\\Users\\Administrator\\Desktop\\book.);        Element book=(Element) document.getRootElement().elements("书").get(1);    book.addElement("书名").setText("平凡的世界");    //更新内存    new new OutputStreamWriter(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\book.));    writer.write(document);    writer.close();  }}

  运行结果:

  

  PS:如果你的项目经常需要更换解析器,建议使用DOM和SAX,这样当更换解析器时不需要更改任何代码,如果没有这样的需求,建议使用dom4j,简单而又强大。