[J2EE-06]XML解析

1.回顾:

1.什么是DTD
    文档类型约束(定义)

2.什么是XML
    HTML
        超文本标记语言
    XML
        可扩展标记语言
    常见的两种XML文档类型约束
        DTD
        Schema

3.什么是合法的XML
    且有只有一个根节点
    由开始标签和结束标签组成( 包含空标签)
    严格区分大小写
    正确嵌套标签

4.DTD
    申明
        内部
            <!DOCTYPE 根节点[]>
        外部
            <!DOCTYPE 根节点 SYSTEM "">
    元素定义
        语法
            <!ELEMENT 元素名称 元素类型>
        类型
            空元素
                EMPTY
            文本元素
                (#PCDATA)
            混合元素
                (e1,e2,e3,...)
        限制
            ,
                元素出现的顺序
            |
                多选一
            ?
                元素出现0次或者1次(可有可无)
            *
                元素出现0次或者N次
            +
                元素出现1次或者N次
            默认1次
                元素出现一次
    属性定义
        语法
            <!ATTLIST 元素名称 属性名称 属性类型 设置说明>
        类型
            ID
                唯一、不能以/或者数字开头
            CDATA
                文本
            ENUM
                枚举、多选一。例如:(男|女|妖)
        设置说明
            必须
                #REQUIRED
            可选
                #IMPLIED
    转义字符
        >
            &gt;
        <
            &lt;
        &
            &amp;
        '
        "

2.XML作用: 

   2.1配置 
   *.xml和*.properties、*.ini、*.yaml

   2.2数据交互(获取第三方数据)
   XML:webservices(axis2) -> xml -> 手机归属地、天气
   JSON  ajax 无刷新(比较流行)

3.Java中3种配置位置及读取方式

  3.1如何使用Properties读取配置文件
      1)*.properties文件以键值对的方式存储数据;
      2)使用Properties类读取配置文件;

package com.zking.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Demo {
 public static void main(String[] args) throws IOException {
	 //1获取文件输入流
	InputStream is = Demo.class.getResourceAsStream("demo.properties");
	//2创建Properties对象
	Properties p=new Properties();
	//3加载文件
	p.load(is);
	//4读取配置文件
	String name=p.getProperty("username");
	System.out.println(name);
	
	//String password=p.getProperty("username");
	//System.out.println(password);
	
	//如果没有属性,则默认赋值。
	String password=p.getProperty("pass", "vfdvdf");
	System.out.println(password);
	
	
 }
}

demo.properties:

username=lt
password=1234


    

   3.2 配置位置
     

//1)存放于根目录下,/代表获取src根目录的绝对路径
        InputStream is = Demo2.class.getResourceAsStream("/demo2.xml");
        System.out.println(is); 


//2)存放于同一类的包下,不加/代表同类名包下的相对路径;
        InputStream is1 = Demo2.class.getResourceAsStream("demo.properties");
        System.out.println(is1);
        
//3)存放于WEB-INF目录下

4.dom4j+xpath解析xml文件

    1)xpath类似数据库中的select语句;
    2)Document有节点(Node)组成:元素节点、属性、文本等;
    3)selectNodes()获取节点下所有子节点;
    4)selectSingleNodes()获取单个节点信息;
    5) xpath语法:/(定位路径)、@(获取属性)

 代码示例(解析student.xml):

package com.zking.util;

import java.io.InputStream;
import java.util.List;


import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class Demo3 {
public static void main(String[] args) {
	//1获取student.xml文件输入流
	InputStream is = Demo3.class.getResourceAsStream("student.xml");
	//2创建SAXReader对象
	SAXReader sax=new SAXReader();
//	3读取文件输入流,并转换成Document对象
	try {
		Document doc=sax.read(is);
		//4循环遍历
//		1)selectNodes:获取多个节点,返回list
//		2)selectSingleNode:获取单个节点
//		3)xpath语法:/代表定位路径
		List<Node> list = doc.selectNodes("/students/student");
 		for (Node node : list) {
			//5将Node节点转换成元素Element(student)
			Element elem=(Element) node;
			//6获取元素节点的属性
			String pid=elem.attributeValue("pid");
			System.out.println(pid);
			//7获取student 节点下的name节点
		Node namenode=elem.selectSingleNode("name");
			System.out.println(namenode.getText());
		}
 		
 		//简化:xpath语法!!!!
 		Node node1 = doc.selectSingleNode("/students/student[@pid='p02']/name");
 		System.out.println(node1.getText());
	} catch (Exception e) {
		e.printStackTrace();
		// TODO Auto-generated catch block
	}
	
	
//	Document 包含元素节点,包含属性以及文本
	
}
}

student.xml:

<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student pid="p01">
        <name>李婷</name>
    </student>
    <student pid="p02">
        <name>李不停</name>
    </student>    
    <student pid="p03">
        <name>李继续</name>
    </student>        
</students>

                


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值