一、前言

HTTP网络传输中的数据组织方式有三种方式:

(1)HTML方式 (2)XML方式  (3)JSON方式

今天主要讲解的是对XML文件的解析

二、对XML文件的介绍

 

语法规则为(1)开始和结束标签匹配  (2)嵌套标签不能互相嵌套 (3) 区分大小写。

三、解析XML数据的方式

1、DOM(org.w3c.dom)
“文档对象模型”方式,解析完的Xml将生成一个树状结构的对象。
2、SAX(org.xml.sax)
以事件的形式通知程序,对Xml进行解析。

3、XMLPULL(org.xmlpull.v1)
程序以“拉取”的方式对Xml进行解析。

四、实例分析(以DOM方式解析XML文件为例)

        这次要实现的使用java编写以DOM方式解析本地某目录下的特定XML文件。                   

    

解析xml 文件 java java中xml解析_List

         

解析xml 文件 java java中xml解析_XML_02

                         图一 Java工程目录                                                                             图二 XML文件的内容

(1)首先需要新建一个用于存储xml文件中各节点的属性和属性值的类

public class Book {

	private int id;
	private String name;
	private float price;
	
	public Book() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public String toString() {
		return "Book [id=" + id + ", name=" + name + ", price=" + price + "]";
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public float getPrice() {
		return price;
	}

	public void setPrice(float price) {
		this.price = price;
	}

}

(2)紧接着就是创建一个使用DOM方式解析的工具类

public class DomService {

	public DomService() {
		// TODO Auto-generated constructor stub
	}
    public static List<Book> getBooks(InputStream inputStream) throws Exception{
    	List<Book> list = new ArrayList<Book>();
    	
    	//创建一个document解析工厂
    	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        //实例化一个DocumentBuilder对象
    	DocumentBuilder builder = factory.newDocumentBuilder();
        //使用DocumentBuilder对象获取一个Document的对象
    	Document document = builder.parse(inputStream);
    	Element element = document.getDocumentElement();  //获得元素节点
    	NodeList nodeList = element.getElementsByTagName("book"); //获取book节点
        for(int i=0; i<nodeList.getLength(); i++){
        	Element bookElement = (Element) nodeList.item(i);
        	Book book = new Book();  //实例化 Book 对象      	
                book.setId(Integer.parseInt(bookElement.getAttribute("id")));
        	NodeList childNodes = bookElement.getChildNodes();
        	for(int j=0; j<childNodes.getLength(); j++){
        		if(childNodes.item(j).getNodeType() == Node.ELEMENT_NODE){
        			if("name".equals(childNodes.item(j).getNodeName())){
        				    book.setName(childNodes.item(j).getFirstChild().getNodeValue());	
        			}else if("price".equals(childNodes.item(j).getNodeName())){
        				book.setPrice(Float.parseFloat(childNodes.item(j).getFirstChild().getNodeValue()));
        			}
        		}
        	}
        	list.add(book);
        }
    	return list;
    }
    //xml文件的路径
	private static String FilePath = "E:/JavaCode/javaCode/android_dom_xml/book.xml";
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			File file = new File(FilePath);
			InputStream inputStream = new FileInputStream(file);
			List<Book> list = getBooks(inputStream);
			for(Book book:list){
				System.out.println(book.toString());
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}