Java--------------->Xml

简介:

   XML: extensible Markup Language 可扩展标记语言 version="1.0"
   可扩展:所有的标签都是自定义的。  
   功能:用于数据存储、配置文件、数据传输

html与xml区别:

 html语法松散,xml语法严格
 html做页面展示,xml做数据存储
 html所有标签都是预定义的,xml所有标签都是自定义的

必须写在xml文档的第一行写法:<?xml version="1.0" ?>
属性:

version:版本号 固定值 1.0
encoding:指定文档的码表。一般写utf-8,也可以 iso-8859-1
standalone:指定文档是否独立  yes 或 no (很少用)
如果是yes,则表示这个XML文档时独立的,不能引用外部的DTD规范文件;
如果是no,则该XML文档不是独立的,表示可以用外部的DTD规范文档

案例

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<stulist>
	<student id="3">
		<name>范冰冰</name>
		<password>123</password>
		<gender></gender>
		<birthday>1983-10-11</birthday>
	</student>
	<student id="2">
		<name>李冰冰</name>
		<password>123</password>
		<gender></gender>
		<birthday>1984-10-11</birthday>
	</student>
	<student id="3">
		<!-- <![CDATA[]]> 表示转义 -->
		<name><![CDATA[&glt;>林心如<]]></name>
		<password>123</password>
		<gender></gender>
		<birthday>1982-10-11</birthday>
	</student>
</stulist>

XML约束

dtd约束或者schema约束
dtd案例:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT students (student*) >
<!ELEMENT student (name,password,gender,birthday)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!ELEMENT gender (#PCDATA)>
<!ELEMENT birthday (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
 schema案例:
<?xml version="1.0"?>
<xsd:schema xmlns="http://www.gyf.cn/xml"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.gyf.cn/xml" elementFormDefault="qualified">
    <xsd:element name="students" type="studentsType"/>
    <xsd:complexType name="studentsType">
        <xsd:sequence>
            <xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="studentType">
        <xsd:sequence>
            <xsd:element name="name" type="xsd:string"/>
            <xsd:element name="password" type="xsd:string" />
            <xsd:element name="gender" type="genderType" />
            <xsd:element name="birthday" type="xsd:string" />
        </xsd:sequence>
        <xsd:attribute name="number" type="numberType" use="required"/>
    </xsd:complexType>
    <xsd:simpleType name="genderType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="male"/>
            <xsd:enumeration value="female"/>
        </xsd:restriction>
    </xsd:simpleType>
    
    <xsd:simpleType name="numberType">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="itgyf_\d{4}"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema> 

Xml解析

       DOM解析:
       将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象。
       优点:因为,在内存中会形成dom树,可以对dom树进行增删改查。
       缺点:dom树非常占内存,解析速度慢。
       SAX解析
       逐行读取,基于事件驱动
       优点:不占内存,速度快
       缺点:只能读取,不能回写(改数据)

Demo4j解析架包

  全称: dom for java
  dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。
  dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它
  的性能超过sun公司官方的dom技术
  案例:
package com.Xml;

import java.util.List;

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

/**
 * 
 * @author 冰镇小可乐
 * @since 2020-11-23
 */
public class Dom4j_Demo {

	public static void main(String[] args) {
		//  使用DMO4J读取xml
		//  1.创建一个sax解析器
		SAXReader reader =new SAXReader();
		//  2.设置读取的xml
		try {
			Document doc=reader.read("G:\\my_java\\Learn\\src\\com\\Xml\\Student.xml");
			// 3.读取设置的xml  树形结构
			//根源素
			Element root=doc.getRootElement();
			System.out.println(root.getName());
			//子元素:通过父元素查找
			@SuppressWarnings("unchecked")
			List<Element> eList=root.elements();
		    eList.forEach((e)->{
		    	System.out.println();
		    	System.out.println(e.getName());
		    	
		    	@SuppressWarnings("unchecked")
				List<Element> infoList =e.elements();
		    	infoList.forEach((info)->{
		    		System.out.println(info.getName()+"="+info.getText());		    		
		    	});
		    });
		   
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

XPATH

专门用来查询,它定义了一种规则
 使用的方法:
 selectSingleNode():
 selectNodes():
 使用的步骤:
 1、注意:要导包 jaxen...jar
2、创建解析器SAXReader reader = new SAXReader();
3、解析xml 获得document对象 Document document = reader.read(url);

XPATH规则

nodename 选取此节点。
 从根节点选取。
..	 选取当前节点的父节点。
@	 选取属性。
[@属性名]    属性过滤
 [标签名]     子元素过滤

XPATH实例

package com.Xml;

import java.util.List;

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

public class Xpath_Demo {

	public static void main(String[] args) {
		// 必须引入jaxen架包
		//  1.创建一个sax解析器
		SAXReader reader =new SAXReader();
		//  2.设置读取的xml
		try {
			@SuppressWarnings("unused")
			Document doc=reader.read("G:\\my_java\\Learn\\src\\com\\Xml\\Student.xml");
	     // 3.读取
			//查询所有student元素
			@SuppressWarnings("unchecked")
			List<Element> l1=doc.selectNodes("//student");
			l1.forEach((a)->{
				System.out.println(a.getName());
			});
			//查询根目录下的student下的name
			@SuppressWarnings("unchecked")
			List<Element> l2=doc.selectNodes("/students/student/name");
			l2.forEach((z)->{
				System.out.println(z.getName()+"="+z.getText());
			});
			//查询父元素
			@SuppressWarnings("unchecked")
			List<Element> l3 =doc.selectNodes("//student/..");
			l3.forEach((s)->{
				System.out.println(s.getName());
			});
			//查询属性
			@SuppressWarnings("unchecked")
			List<Attribute> l4 =doc.selectNodes("/studens/student/@number");
			l4.forEach((ss)->{
//				System.out.println(ss.getName()+"="+ss.getValue());
				System.out.println(ss.getName()+"="+ss.getText());
			});
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值