XML

xml;extensible markup language 可扩展标记语言

idea添加xml模板

1.Ctrl + Alt+S
2 .找到File and Code Templates
3.在这里插入图片描述

xml基本语法

	1. xml文档的后缀名 .xml
	2. xml第一行必须定义为文档声明
	3. xml文档中有且仅有一个根标签
	4. 属性值必须使用引号(单双都可)引起来
	5. 标签必须正确关闭
	6. xml标签名称区分大小写

xml基本代码

<?xml version="1.0" encoding="UTF-8" ?>
 <?xml-stylesheet type="text/css" href="a.css" ?>//引入css,了解
<students>
   <student number="s001">
   	<name>zhangsan</name>
   	<age>abc</age>
   	<sex>hehe</sex>
   </student>
   <student number="s002">
   	<name>lisi</name>
   	<age>24</age>
   	 <code>
           <![CDATA[//CDATA区域的文本原样输出<![CDATA[ ]]>
               if(a < b && a > c) {}
           ]]]>
       </code>
   	<sex>female</sex>
   </student>	
</students>

约束的分类

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范(与xml语法无关),这称之为XML约束。
在这里插入图片描述
1.DTD简单的约束技术
2.schema:复杂的约束技术

DTD

student.dtd

<!ELEMENT students (student*) > //可以放多个student子标签
<!ELEMENT student (name,age,sex)>//各按顺序出现一次
<!ELEMENT name (#PCDATA)>//pcadata字符串
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>//必须出现,属性

student.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students SYSTEM "student.dtd">
//外部引用 :<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
//网络引用:<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
//内部引用:
<!DOCTYPE students [
		<!ELEMENT students (student+) >
		<!ELEMENT student (name,age,sex)>
		<!ELEMENT name (#PCDATA)>
		<!ELEMENT age (#PCDATA)>
		<!ELEMENT sex (#PCDATA)>
		<!ATTLIST student number ID #REQUIRED>
		]>-->
<students>
	<student number="s001">
		<name>zhangsan</name>
		<age>abc</age>
		<sex>hehe</sex>
	</student>
	<student number="s002">
		<name>lisi</name>
		<age>24</age>
		<sex>female</sex>
	</student>	
</students>
schema
<?xml version="1.0"?>
<xsd:schema xmlns="http://www.itcast.cn/xml"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.itcast.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="age" type="ageType" />
            <xsd:element name="sex" type="sexType" />
        </xsd:sequence>
        <xsd:attribute name="number" type="numberType" use="required"/>
    </xsd:complexType>
    <xsd:simpleType name="sexType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="male"/>//枚举
            <xsd:enumeration value="female"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="ageType">
        <xsd:restriction base="xsd:integer">
            <xsd:minInclusive value="0"/>//最小的值
            <xsd:maxInclusive value="256"/>//最大的值
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="numberType">//简单的类型
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="heima_\d{4}"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema> 
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 
	1.填写xml文档的根元素
	2.引入xsi前缀.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	3.引入xsd文件命名空间.  xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
	4.为每一个xsd约束声明一个前缀,作为标识  xmlns="http://www.itcast.cn/xml" 
 -->
<students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			xmlns="http://www.itcast.cn/xml"
			xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
>
	<student number="heima_0001">
		<name>tom</name>
		<age>18</age>
		<sex>male</sex>
	</student>

</students>

xml解析器

	1. JAXP:sun公司提供的解析器,支持dom和sax两种思想
	2. DOM4J:一款非常优秀的解析器
	3. Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
	4. PULL:Android操作系统内置的解析器,sax方式的。
jsoup

导入jar包
在这里插入图片描述

public class JsoupDemo1 {
    public static void main(String[] args) throws IOException {
        //2.获取Document对象,根据xml文档获取
        //2.1获取student.xml的path
        String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
        //防止中文路径出现乱码
         String configPath = java.net.URLDecoder.decode(path,"utf-8");
        //2.2解析xml文档,加载文档进内存,获取dom树--->Document
        Document document = Jsoup.parse(new File(configPath), "utf-8");
//通过网络路径
/*  URL url = new URL("https://baike.baidu.com/item/jsoup/9012509?fr=aladdin");
		//代表网络中的一个资源路径
        Document document = Jsoup.parse(url, 10000);*/
        //3.获取元素对象 Element
        Elements elements = document.getElementsByTag("name");
	   System.out.println(elements.size());
        //3.1获取第一个name的Element对象
        Element element = elements.get(0);
        //3.2获取数据
        String name = element.text();
        System.out.println(name);
    }

}

        //3.1获取所有student对象
        Elements elements = document.getElementsByTag("student");
        //3.2 获取属性名为id的元素对象们
        Elements elements1 = document.getElementsByAttribute("id");
        //3.2获取 number属性值为heima_0001的元素对象
        Elements elements2 = document.getElementsByAttributeValue("number", "heima_0001");
        //3.3获取id属性值的元素对象
        Element itcast = document.getElementById("itcast");

	 //通过Element对象获取子标签对象
        Element element_student = document.getElementsByTag("student").get(0);
        Elements ele_name = element_student.getElementsByTag("name");
        System.out.println(ele_name.size());
        //获取student对象的属性值
        String number = element_student.attr("NUMBER");
        //获取文本内容
        String text = ele_name.text();
        String html = ele_name.html();
        System.out.println(text);
        System.out.println(html);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值