• JavaWeb


    /**
     * XML语言
     */
    Extensible Markup Language
    可扩展的标记语言
    研发初衷是替代不规范的Html,规范代码结构
    现多用于存储数据,配置文件
    1)数据结构严谨
    2)允许自定义标签
    /**
     * XML命名规范 
     */
    1)区分大小写
    2)不能以数字、下划线开头
    3)不能以xml、Xml、XML开头
    4)不能包含空格
    5)不能包含冒号
    /**
     * XML文档声明 版本号 解析字符集 是否支持独立运行  
     */
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    /**
     * XML元素
     */
    就是通常所说的标签
    开始标签
    结束标签
    自闭和标签
    /**
     * XML中的空格和换行
     */
    XML把空格和换行都做当做原始内容来处理,需要额外注意原始内容
    /**
     * XML解析
     */
    解析:从XML文件中读取内容的过程
    /**
     * 利用DOM思想解析XML(安卓开发不使用)
     */
    Document Object Model(文档对象模型)
    出身:由W3C组织发布
    特点:把文档中的所有内容都封装成对象
    缺点:对象都保存在内存中,资源消耗过大,完全不适合移动端开发
    /**
     * 利用Sax思想解析XML(安卓开发不使用)
     */
    原理:事件驱动
    出身:国外论坛
    优点:根据预定义的事件,对XML进行筛选,解析完成后只保留需要的内容,更节约资源
    缺点:一次性读完XML,无法进行增删改操作
    /**
     * 利用Pull思想解析XML,用于安卓开发
     */
    原理:事件驱动
    优点:解析过程比Sax解析更加灵活,以事件为单位进行操作,事件完成后需手动调用继续进行
    /**
     * Pull解析案例
     */
    //xml文件
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <students>
    	<student number="001">
    		<name>Tom</name>
    		<age>16</age>
    		<sex>Male</sex>
    	</student>
    	<student number="002">
    		<name>Jerry</name>
    		<age>18</age>
    		<sex>Female</sex>
    	</student>
    	<student number="003">
    		<name>Jack</name>
    		<age>21</age>
    		<sex>Male</sex>
    	</student>
    	<student number="004">
    		<name>Rose</name>
    		<age>24</age>
    		<sex>Female</sex>
    	</student>
    </students>
    //student模型
    package com.wewezhang.jdbc_hello;
    
    public class Student {
    	
    	private String number;
    	private String name;
    	private String sex;
    	private int    age;
    	
    	public String getNumber() {
    		return number;
    	}
    	public void setNumber(String number) {
    		this.number = number;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getSex() {
    		return sex;
    	}
    	public void setSex(String sex) {
    		this.sex = sex;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	
    	@Override
    	public String toString() {
    		return "Student [number=" + number + ", name=" + name + ", sex=" + sex + ", age=" + age + "]";
    	}
    }
    //导包
    http://maven.ibiblio.org/maven2/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar 
    BuildPath
    //异常case expressions must be constant expressions
    快捷键Ctrl+1 避免使用switch
    //PullTool解析工具
    package com.wewezhang.jdbc_hello;
    
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.junit.Test;
    import org.xmlpull.v1.XmlPullParser;
    import org.xmlpull.v1.XmlPullParserFactory;
    
    public class PullTool {
    	
    	public static List<Student> parserXml(InputStream weInputStream) throws Exception {
    		//解析器工厂
    		XmlPullParserFactory weFactory = XmlPullParserFactory.newInstance();
    		//获得解析器
    		XmlPullParser weParser = weFactory.newPullParser();
    		//读取XML字节流
    		weParser.setInput(weInputStream, "UTF-8");
    		//获得当前事件的状态
    		int weType = weParser.getEventType();
    		//循环读取xml流
    		List<Student> weList = null;
    		Student weStudent = null;
    		while(weType != weParser.END_DOCUMENT) {
    			String weName = weParser.getName();
    			if (weType == weParser.START_TAG) {
    				if( "students".equals(weName) ){
    					weList = new ArrayList<Student>();
    				} else if( "student".equals(weName) ) {
    					weStudent = new Student(); 
    					weStudent.setNumber(weParser.getAttributeValue(0));
    				} else {
    					if( "name".equals(weName) ){	
    						weStudent.setName(weParser.nextText());
    					}else if( "age".equals(weName) ){
    						weStudent.setAge(Integer.parseInt(weParser.nextText()));
    					}else if( "sex".equals(weName) ){
    						weStudent.setSex(weParser.nextText());
    					}
    				}
    			} else if (weType == weParser.END_TAG) {
    				if( "student".equals(weName) ){
    					weList.add(weStudent);
    					weStudent = null;
    				}
    			} else {
    			}
    			weType = weParser.next();
    		} 
    		return weList;
    	}
    	
    	//单元测试
    	@Test
    	public void funWeXml() throws Exception {
    	    FileInputStream weInputStream = new FileInputStream("src/MyXml.xml");
    	    List<Student> weList = parserXml(weInputStream);
    	    System.out.print(weList);
    	}
    }
    

      

  • 相关阅读:
    SQL Server Code tips (持续更新)
    Oracle 函数 “判断数据表中不存在的数据,才允许通过”
    Oracle 函数 “把当前的用户(审核人,审核通过后)插入到数据表中”
    Oracle 函数 “自动生成订单号”
    Oracle中的instr()函数 详解及应用
    Oracle中的substr()函数 详解及应用
    Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire
    Spring实战(二)Spring容器和bean的生命周期
    Spring实战(一)Spring简介---呕心沥血只为让Java开发更简单。
    git、git bash、git shell
  • 原文地址:https://www.cnblogs.com/WeWeZhang/p/6668265.html
Copyright © 2020-2023  润新知