XML的基本使用_position: start_document seen <?xml version="1.0" -程序员宅基地

技术标签: XML  

1 XML

1.1 XML概述

Extensible Markup Language
可拓展标记语言

用途:
1. 数据存储,小型数据库,存在一定的CRUD操作可行性
2. 网络端数据的传输
3. JavaWEB框架项目配置文件
Spring Druid …

w3c万维网联盟指定的规范

1.2 基本语法

1. XML文件后缀名是.xml
2. XML第一行是对于当前文件的定义声明
3. XML文件中有且只有一个根标签
4. 属性值必须使用引号包含,这里推荐使用双引号
5. 标签必须正确匹配,正确开始和关闭
6. XML标签内严格区分大小写


1.3 XML文件组成部分

1. 文档声明:
   a. 格式:
       <?xml 属性列表 ?>
      <?xml version="1.0" encoding="utf-8" ?>
      version: 当前XML文件版本号
      encoding: 编码方式,这里建议XML文件的保存编码集和对应的解析编辑一致。
      standalone:是否依赖于其他文件 [了解]
      yes 不依赖, no 依赖
2. 指令(了解)
   这里可以导入一些CSS样式
      <?xml-stylesheet type="text/css" href="test.css" ?>
3. 标签内容自定义
   规则:
      a. 自定义标签允许使用英文字母,数字和其他标点符号(_ - .)
      b. 不允许使用数组和标点符号开头,只能用英文字母
      c. 不允许在自定义标签内使用xml标记,XML也不行
      d. 名字不允许出现空格
4. 属性
   可以给标签一个属性,有时候要求ID属性是惟一的
5. 文本(了解)
   CDATA区,所见即所得,CDATA区内容是完整展示的
   格式:
      <![CDATA[ 数据 ]]>


1.4 XML文件数据约束

1. DTD
一种简单的约束方式
但是存在一定的约束问题
2. Schema
一种复杂XML文件约束方式
非常严谨


1.4.1 DTD约束

dtd约束代码示例:

<!-- students 根标签 要求根标签内存放student -->
<!ELEMENT students (student*) >
<!-- student标签包含子标签的内容 -->
<!ELEMENT student (name,age,sex)>
<!-- 所有子标签当前数据都都是文本形式 -->
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!-- ATTLIST Attribute List 属性列表 student id ID -->
<!ATTLIST student id ID #REQUIRED>

xml代码示例:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE students SYSTEM "D:\NZ\IEDA\Day25_SL_IDEA\src\com\qfedu\b_dtd\student.dtd">
<students>
    <student id="qf1">
        <name>嘟嘟</name>
        <age>10</age>
        <sex>male</sex>
    </student>
    <student id="qf2">
        <name>滴滴</name>
        <age>16</age>
        <sex>male</sex>
    </student>
</students>

<注释记得看>

1.4.2 Schema约束

代码示例规范约束:
student.xsd

<?xml version="1.0"?>
<xsd:schema xmlns="http://www.qfedu.com/xml"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.qfedu.com/xml" elementFormDefault="qualified">
    <!-- 根节点名字和包含的内容,内容是自定义studentType -->
    <xsd:element name="students" type="studentsType"/>
    <!-- studentType类型声明   -->
    <xsd:complexType name="studentsType">
        <xsd:sequence>
            <!-- students根节点中存放的是student类型  type="studentType" 要求student的个数从0开始 个数不限制 -->
            <xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    <!-- studentType声明 -->
    <xsd:complexType name="studentType">
        <xsd:sequence>
            <!-- 要求student标签内有name,age,sex子标签,并且要求对一个对应保存的数据类型是type指定 -->
            <xsd:element name="name" type="xsd:string"/>
            <!-- ageType 和 sexType 是自定义数据约束 -->
            <xsd:element name="age" type="ageType" />
            <xsd:element name="sex" type="sexType" />
        </xsd:sequence>
        <!-- 给予Student标签属性 属性为id,要声明idType, use="required"不可缺少的 -->
        <xsd:attribute name="id" type="idType" use="required"/>
    </xsd:complexType>
    <!-- sexType性别类型声明 -->
    <xsd:simpleType name="sexType">
        <xsd:restriction base="xsd:string">
            <!-- 有且只有两个数据 male female -->
            <xsd:enumeration value="male"/>
            <xsd:enumeration value="female"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="ageType">
        <xsd:restriction base="xsd:integer">
            <!-- 0 ~ 256 要求范围,是一个integer类型 -->
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="256"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="idType">
        <xsd:restriction base="xsd:string">
            <!-- ID类型,要求gp_xxxx(四位数字) -->
            <xsd:pattern value="gp_\d{4}"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema> 

xml代码示例:
student.,xml

<?xml version="1.0" encoding="utf-8"?>

<!--
1. 填写根节点约束
2. 引入xsi前缀,xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3. 引入xsd文件命名空间 xsi:schemaLocation="http://www.qfedu.com/xml  student.xsd"
4. 为xsd约束声明一个前缀,作为表示
-->
<students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://www.qfedu.com/xml"
            xsi:schemaLocation="http://www.qfedu.com/xml  student.xsd"
>
    <student id="gp_0001">
        <name>滴滴</name>
        <age>5</age>
        <sex>male</sex>
    </student>
    <student id="gp_0002">
        <name>嘟嘟</name>
        <age>17</age>
        <sex>male</sex>
    </student>
</students>

记得看注释哦

2 XML解析

2.1 XML解析思路

DOM解析
   Document Object Model 文件对象模型
   把XML整个文件看做一个Document对象,每一个节点看做一个Element,节点中有Attribute,或者当前节点中存在Text文本内容。
   DOM是将整个XML文件读取到计算机内存中,可以进行CRUD操作。
   缺点:
      占用了大量内存空间
   适用的环境:
      服务器对于XML文件的解析过程。

SAX解析
   逐行读取,给予一定的事件操作。
   读取一行内容,释放上一行内容,可以有效的节约内存空间
   缺点:
      不能对XML文件,进行增删改
   适用的环境:
      手机读取解析XML文件时采用的方式。


2.2 XML文件解析工具

1. JAXP: SUN提供的一个基本的解析器,支持DOM和SAX两种解析方式,但是操作很繁琐,不便于程序员开发。
2. Dom4j: DOM For Java 一款非常优秀的解析器,Spring,SpringMVC… 框架中集成的XML解析器
3. Jsoup: 基于Java完成的对于HTML解析的工具,因为HTML和XML文件都是标记语言。给Jsoup一个URL,页面地址. Java的小爬虫,API很多很方便
4. PULL:
Android手机上集成的XML解析工具,SAX方式解析


2.3 Dom4j使用入门

1. 导包
   目前使用的是第三方工具,不是原生的JDK
   导入第三方Jar包
2. 设置IDEA
3. Dom4j涉及到的方法
   SAXReader();
      解析XML文件使用的核心类
   read() --> XML文件Document对象
   Document document = new SAXReader().read(new File("./xml/User.xml"));
         Document对象中可以使用方法
   Element getRootElement();
         获取当前XML文件的根节点对象
   Element对象中可以使用方法
      List elements();
         当前节点下的所有子节点
      List elements(String name);
         当前节点下所有指定名字的子节点
      Element element();
         获取当前节点下的第一个子节点
      Element element(String name);
         获取当前节点下指定名字的第一个子节点
      Attribute getAttribute(String name);
         根据属性名获取对应的属性对象Attribute
         Attribute节点中可以使用String getValue()来获取对应的节点数据
      String getName();
         获取当前节点的名字
      String getText();
         获取当前节点对应的文本数据

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44945658/article/details/104737194

智能推荐

自连接表 ——《二级关注者》LeetCode Plus 会员专享题【详细解析】Hive / MySQL-程序员宅基地

文章浏览阅读5.2k次。今天给大家分享的题是LeetCode的第614题——二级关注者。

【经典算法】LCR187:破冰游戏(约瑟夫问题,Java/C/Python3/JavaScript实现含注释说明,Easy)-程序员宅基地

文章浏览阅读465次,点赞18次,收藏9次。方式描述优点缺点时间复杂度空间复杂度迭代模拟直接根据规则模拟整个游戏过程,依次淘汰成员直观和易理解当成员数目较大时,效率较低O(num^2)O(num)数学+迭代通过数学公式递推最终结果,逐步缩小问题规模时间效率高,不需要昂贵的删除操作需要数学知识,公式推导可能不够直观O(num)O(1)递归通过递归函数,从基础情况逐步返回最终答案代码简洁,易编写栈空间开销大,可能会栈溢出O(num)O(num)迭代改进递归方法的迭代版本,避免了栈溢出的问题。

好消息!PostgreSQL 13增加新功能!_pg13 pg_verifybackup-程序员宅基地

文章浏览阅读6.4k次,点赞17次,收藏22次。Number one:vacuum速度提高3倍对于PostgreSQL的新手来说,清理是多版本并发系统的一部分,它负责删除每当记录被更改或删除时生成的无效元组或行。autovacuum功能可以清除死掉(已删除)的隐藏行,从而消除表膨胀,类似于Java的垃圾收集器。有两个与vacuum相关的改进:索引的并行清理以及允许对仅追加的数据进行仅索引扫描。首先,有了并行vacuum,Postgres现在可以使用多个处理器线程来更快地执行vacuum操作。我们的测试结果表明,使用多个并行工作时,vacuum可以提_pg13 pg_verifybackup

基于ssm+vue.js+uniapp小程序的高校后勤报修系统附带文章和源代码部署视频讲解等-程序员宅基地

文章浏览阅读850次,点赞10次,收藏11次。博主介绍:CSDN特邀作者、985计算机专业毕业、某互联网大厂高级全栈开发程序员、码云/掘金/华为云/阿里云/InfoQ/StackOverflow/github等平台优质作者、专注于Java、小程序、前端、python等技术领域和毕业项目实战,以及程序定制化开发、全栈讲解、就业辅导、面试辅导、简历修改。精彩专栏 推荐订阅2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐。

利用java将.heic后缀文件转化.png或者jpg等_java heic格式转化jpg-程序员宅基地

文章浏览阅读2k次。利用java将.heic后缀文件转化.png或者jpg等怎么解决直接上代码不整虚的。主要利用imageMagic工具首先下载这个imageMagic工具下载安装注意事项 勾选如图,否则转换报错一直Next就好贴上java代码/**HEIC格式转换jpg*/class Main {//你安装得路径private static final String IMAGE_MAGICK_PATH = “C:\Program Files\ImageMagick-7.1.0-Q16-HDRI”;public_java heic格式转化jpg

ubuntu开机后可以输入密码,但是一直进不去界面_resume normal boot需要多久-程序员宅基地

文章浏览阅读3.6k次,点赞4次,收藏11次。我在配置显卡驱动的时候开关机了好多次就出现了这种情况解决方法:首先强制关机然后重启进入ubantu高级系统,进去之后里面有两个带有recovery的选项,选择版本低的那一个,点进去之后选择第一个resume resume normal boot选项,然后就可以进去了,亲测好用,里面的文件没有变化。如果可以在登录密码的界面按ctrl+alt+F1,可以使用这个方法https://blo..._resume normal boot需要多久

随便推点

Flex学习_leove是什么意思-程序员宅基地

文章浏览阅读259次。http://blog.chinaunix.net/uid/122937/cid-11690-list-1.htmlFlex学习_leove是什么意思

IOS safari 浏览器 时间乱码(ios时间显示NaN) 问题解决_苹果平板谷歌浏览器显示nan-程序员宅基地

文章浏览阅读2.1w次,点赞2次,收藏3次。通常IOS下时间错误表现形式问题一: 这个界面运用了大量的日期类型的计算,当我们用JavaScript实例化一个日期对象时,我们可以这样用:[javascript] view plain copy print?var date =new Date(); 上面这段代码是_苹果平板谷歌浏览器显示nan

VMWare WorkStation 虚拟机安装配置CentOs7.6_workstation 虚拟centos 7.6-程序员宅基地

文章浏览阅读74次。VMWare WorkStation 虚拟机安装配置CentOs7.6虚拟机VmWare版本选择12以上的比较稳定安装步骤:CentOs7.6下载地址:https://archive.kernel.org/centos-vault/7.6.1810/isos/x86_64/_workstation 虚拟centos 7.6

PHP-校园二手交易APP--99211(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、大数据、全套文案-程序员宅基地

文章浏览阅读1.6k次,点赞32次,收藏30次。系统功能包括管理员服务端:主页、公共管理(轮播图、网站公告)用户管理(管理员、买家、卖家)信息管理(商品求购、求购分类、二手资讯、资讯分类)二手商城、订单列表、分类列表)个人资料;卖家用户端:个人资料、商品求购、订单列表、二手商城;买家客户端:首页、二手资讯、二手商城、二手资讯、购物车、我的(收藏、基本信息、收货地址、订单、)等功能。

联想首次展示全栈算力方案服务,品牌换新亮相_算力服务 结果交付 模式-程序员宅基地

文章浏览阅读720次。基于软硬服一体化的优势,联想打造了丰富多样的四维算力服务,即融合化、场景化、订阅化、绿色化,可以满足不同企业、不同行业的定制化需求。_算力服务 结果交付 模式

【知识图谱】复旦大学:基于知识图谱的用户画像技术研究_通过知识图谱对图像数据进行知识发现的研究-程序员宅基地

文章浏览阅读1.6w次,点赞4次,收藏60次。复旦大学 基于知识图谱的用户画像技术研究 基于标签的用户画像基于标签的用户画像:给 用户打兴趣、行先、属性等不同维度的标签,并 赋以不同的权重,以准确刻画用户。当前画像的主要问题-不全•数据稀疏 •隐私保护-不准•噪音标签 •粒度太粗 什么是知识图谱 知识图谱知识图谱是一种海_通过知识图谱对图像数据进行知识发现的研究

推荐文章

热门文章

相关标签