Java对XML文件的解析

一、前言

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文件。                   

             

                         图一 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();
		}
	}

}

这个使用DOM方式解析XML文件的源码下载链接:https://download.csdn.net/download/nxc_boy/10599443

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java提供了多种方式来解析XML文件,包括DOM、SAX和StAX等。 1. DOM(Document Object Model)解析:将整个XML文档加载到内存中,形成一棵树形结构,可以通过访问树的节点来获取XML文件中的数据。 2. SAX(Simple API for XML解析:基于事件驱动的解析方式,逐行读取XML文档,遇到节点开始、结束、属性等事件时触发相应的事件处理器进行处理。 3. StAX(Streaming API for XML解析:也是基于事件驱动的解析方式,但是与SAX不同的是,它可以在读取节点时进行修改,也可以在遍历时进行跳过,具有更高的灵活性。 下面是一个使用DOM解析XML文件的示例代码: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; import java.io.File; public class XmlParser { public static void main(String argv[]) { try { File fXmlFile = new File("file.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("student"); System.out.println("----------------------------"); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); System.out.println("\nCurrent Element :" + nNode.getNodeName()); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.println("Student id : " + eElement.getAttribute("id")); System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent()); System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent()); System.out.println("Email : " + eElement.getElementsByTagName("email").item(0).getTextContent()); System.out.println("Marks : " + eElement.getElementsByTagName("marks").item(0).getTextContent()); } } } catch (Exception e) { e.printStackTrace(); } } } ``` 该示例代码读取了一个名为“file.xml”的XML文件,遍历其中的“student”节点,并输出每个节点的“id”属性以及“firstname”、“lastname”、“email”和“marks”子节点的文本内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值