大道论

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 153|回复: 1

JavaWeb06

[复制链接]

2

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-9-20 15:44:27 | 显示全部楼层 |阅读模式
1.XML基本概述


  • XML的全称为(EXtensible Markup Language),是一种可扩展的标记语言 标记语言: 通过标签来描述数据的一 门语言(标签有时我们也将其称之为元素) 可扩展:标签的名字是可以自定义的,XML文件是由很多标签组成的, 而标签名是可以自定义的。
  • 作用:配置文件、数据传输
  • 优势:可读性好、可维护性高
2.XML入门案例

<?xml version="1.0" encoding="utf-8" ?>
<students>
    <student id="1001">
        <name>张三丰</name>
        <age>11</age>
    </student>
    <student id="1002">
        <name>张无忌</name>
        <age>11</age>
    </student>
</students>解释:

  • <?xml version="1.0" encoding="utf-8" ?> : 文档声明方式,每个xml文件的第一个语句都是改语法。
  • <students></students>:是xml文档的根节点
  • <student></student> : 子元素
  • id = "1001" : 属性值
3.XML标签语法规制


  • 标签是由一对尖括号和自定义标签名称组成
  • 标签必须成对存在
  • 特殊的标签可以单个存在,但是必须加结束符/
  • 标签可以有属性,多个属性之间用空格隔开,属性值必须用双引号引起
  • 标签可以嵌套使用。
<?xml version="1.0" encoding="utf-8" ?>
<students>
    <student id="1001">
        <name>张三丰</name>
        <age>11</age>
    </student>
    <student id="1002">
        <name>张无忌</name>
        <age>11</age>
    </student>
</students>4.DTD约束

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
4.1 DTD声明格式

内嵌式声明 : 就是将语法声明在XML文档中。
<!DOCTYPE 根元素 [元素声明]>外联式 : 创建一个.dtd文件通过语法进行引入
1.引入本地dtd
<!DOCTYPE 根元素名称 SYSTEM ‘DTD文件的路径'>
2.在xml文件内部引入
<!DOCTYPE 根元素名称 [ dtd文件内容 ]>
3.引入网络dtd
<!DOCTYPE 根元素的名称 PUBLIC "DTD文件名称" "DTD文档的URL">4.2 DTD元素

语法格式
1.基本语法
<!ELEMENT 元素名称 类别>
<!ELEMENT 元素名称 (元素内容)>

2.生命一个空元素
<!ELEMENT 元素名称 EMPTY>

3.声明一个pcdata的元素
<!ELEMENT 元素名称 (#PCDATA)>

4.声明一个元素可以式任意
<!ELEMENT 元素名称 ANY>

5.声明一个只能有一个子元素的元素
<!ELEMENT 元素名称 (子元素名称 1)>

6.声明一个可以式1个或多个子元素的元素
<!ELEMENT 元素名称 (子元素名称+)>

7.声明一个可以是0个或是多个子元素
<!ELEMENT 元素名称 (子元素名称*)>代码示例
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to      (#PCDATA)>
<!ELEMENT from    (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body    (#PCDATA)>4.3 DTD声明属性

<!ATTLIST 元素名称 属性名称 属性类型 默认值>可选元素
类型描述
CDATA值为字符数据 (character data)
(en1|en2|..)此值是枚举列表中的一个值
ID值为唯一的 id
IDREF值为另外一个元素的 id
IDREFS值为其他 id 的列表
NMTOKEN值为合法的 XML 名称
NMTOKENS值为合法的 XML 名称的列表
ENTITY值是一个实体
ENTITIES值是一个实体列表
NOTATION此值是符号的名称
xml:值是一个预定义的 XML 值
默认值参数可使用下列值:
解释
属性的默认值
#REQUIRED属性值是必需的
#IMPLIED属性不是必需的
#FIXED value属性值是固定的
代码测试
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">4.4 DTD实体定义

语法格式
<!ENTITY 实体名称 "实体的值">代码测试
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">4.4 代码演示 :

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE students [
        <!ELEMENT students (student*)>
        <!ELEMENT student (id,name,age)>
        <!ELEMENT id      (#PCDATA)>
        <!ELEMENT name    (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        ]>
<students>
    <student>
        <id>1001</id>
        <name>张三丰</name>
        <age>11</age>
    </student>
    <student>
        <id>1002</id>
        <name>张无忌</name>
        <age>12</age>
    </student>
</students>5.Schema约束

XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 可描述 XML 文档的结构。
XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。
5.1 Schema简介

Schema的用处:

  • 定义可出现在文档中的元素
  • 定义可出现在文档中的属性
  • 定义哪个元素是子元素
  • 定义子元素的次序
  • 定义子元素的数目
  • 定义元素是否为空,或者是否可包含文本
  • 定义元素和属性的数据类型
  • 定义元素和属性的默认值以及固定值
为什么使用Schema

  • 支持数据类型
  • 不必学习新的语言
  • 可使用 XML 编辑器来编辑 Schema 文件
  • 可使用 XML 解析器来解析 Schema 文件
  • 可通过 XML DOM 来处理 Schema
  • 可通过 XSLT 来转换 Schema
5.2 schema根元素

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">

...
...
</xs:schema>片段解释
片段一:
xmlns:xs="http://www.w3.org/2001/XMLSchema"显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs:
片段二
targetNamespace="http://www.w3school.com.cn" 显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: "http://www.w3school.com.cn"。 片段三
xmlns="http://www.w3school.com.cn" 指出默认的命名空间是 "http://www.w3school.com.cn"。
片段四
elementFormDefault="qualified" 出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。
5.3  简单元素类型
简易元素指那些仅包含文本的元素。它不会包含任何其他的元素或属性。
不过,“仅包含文本”这个限定却很容易造成误解。文本有很多类型。它可以是 XML Schema 定义中包括的类型中的一种(布尔、字符串、数据等等),或者它也可以是您自行定义的定制类型。
您也可向数据类型添加限定(即 facets),以此来限制它的内容,或者您可以要求数据匹配某种特定的模式。
元素定义
<xs:element name="xxx" type="yyy"/>

<!--
此处 xxx 指元素的名称,yyy 指元素的数据类型。
最常用的类型是:
    xs:string
    xs:decimal
    xs:integer
    xs:boolean
    xs:date
    xs:time
-->属性的定义
<xs:attribute name="xxx" type="yyy"/>
<!--
在此处,xxx 指属性名称,yyy 则规定属性的数据类型。
最常用的类型是:
    xs:string
    xs:decimal
    xs:integer
    xs:boolean
    xs:date
    xs:time
-->限定
<!--对值的限定-->
<xs:simpleType>
    <xs:restriction base="xs:数据类型">
        <xs:minInclusive value="限定值"/>
        <xs:maxInclusive value="限定值"/>
    </xs:restriction>
</xs:simpleType>

<!--对一组值的限定-->
<xs:simpleType>
    <xs:restriction base="xs:数据类型">
        <xs:enumeration value="值1"/>
        <xs:enumeration value="值2"/>
        ....
        <xs:enumeration value="值n"/>
    </xs:restriction>
</xs:simpleType>

<!--对一系列值的限定-->
<xs:simpleType>
    <xs:restriction base="xs:string">
        <xs:pattern value="[a-z]"/>
    </xs:restriction>
</xs:simpleType>

<!--对一系列值的其他限定-->
<xs:simpleType>
    <xs:restriction base="xs:string">
        <xs:pattern value="([a-z])*"/>
    </xs:restriction>
</xs:simpleType>5.4 复杂元素类型

实际上就是元素指包含其他元素及/或属性的 XML 元素。
定义格式:
<xs:element>
  <xs:complexType>
    <xs:sequence>
      <xs:element name="属性名" type="xs:类型"/>
      <xs:element name="属性名" type="xs:类型"/>
        ...
    </xs:sequence>
  </xs:complexType>
</xs:element>实际案例
<?xml version="1.0" encoding="ISO-8859-1"?>
<shiporder orderid="889923"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:noNamespaceSchemaLocation="shiporder.xsd">
    <orderperson>George Bush</orderperson>
    <shipto>
        <name>John Adams</name>
        <address>Oxford Street</address>
        <city>London</city>
        <country>UK</country>
    </shipto>
    <item>
        <title>Empire Burlesque</title>
        <note>Special Edition</note>
        <quantity>1</quantity>
        <price>10.90</price>
    </item>
    <item>
        <title>Hide your heart</title>
        <quantity>1</quantity>
        <price>9.90</price>
    </item>
</shiporder>shiporder.xsd
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="shiporder">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="orderperson" type="xs:string"/>
                <xs:element name="shipto">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="name" type="xs:string"/>
                            <xs:element name="address" type="xs:string"/>
                            <xs:element name="city" type="xs:string"/>
                            <xs:element name="country" type="xs:string"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="item" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="title" type="xs:string"/>
                            <xs:element name="note" type="xs:string" minOccurs="0"/>
                            <xs:element name="quantity" type="xs:positiveInteger"/>
                            <xs:element name="price" type="xs:decimal"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:attribute name="orderid" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>
</xs:schema>6.Dom4j解析xml文件

6.1 概述

所有现代浏览器都内建了用于读取和操作 XML 的 XML 解析器。
解析器把 XML 读入内存,并把它转换为可被 JavaScript 访问的 XML DOM 对象。
微软的 XML 解析器与其他浏览器中的解析器是有差异的。微软的解析器支持对 XML 文件和 XML 字符串(文本)的加载,而其他浏览器使用单独的解析器。不过,所有的解析器都含有遍历 XML 树、访问、插入及删除节点的函数。
在Java中通过Dom4j的工具,来对XML进行解析
6.2 Dom4j的基本使用

开发步骤:

  • 导入Dom4j的jar包
  • 创建解析对象 --- 》SAXReader
  • 创建文档对象----》Document
  • 创建根节点元素对象 ----》Element
  • 获取子节点的的所有对象 ----》List<Element>
  • 获取每个节点元素的文本
代码演示
public class Demo01 {
    public static void main(String[] args)  {
        try {
            //1,创建解析对象
            SAXReader saxReader = new SAXReader();
            //2,获取文档对象
            Document document = saxReader.read("students.xml");
            //3,获取根节点对象
            Element rootElement = document.getRootElement();
            //4,获取根节点中所有子节点对象
            List<Element> elements = rootElement.elements();
            for (Element element : elements) {
                //获取子节点中的文本
                String name = element.elementText("name");
                String age = element.elementText("age");
                System.out.println(name+","+age);
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}
回复

使用道具 举报

1

主题

4

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2025-2-10 11:10:02 | 显示全部楼层
纯粹路过,没任何兴趣,仅仅是看在老用户份上回复一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|大道论

GMT+8, 2025-4-7 20:41 , Processed in 0.117803 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表