XML语言

XML:

XML是可扩展的标记语言
标记语言: 通过标签来描述数据的一门语言(标签有时我们也将其称之为元素)
可扩展:标签的名字是可以自定义的,XML文件是由很多标签组成的,而标签名是可以自定义的
xml学习网站https://www.w3school.com.cn/x.asp

作用:

用于进行存储数据和传输数据
数据交换:不同的计算机语言之间,不同的操作系统之间进行数据交换。
主要作为软件的配置文件

优点:

可读性好
可维护性高

标签的规则:

标签由一对尖括号和合法标识符组成,标签必须成对出现

    <!--标签由一对尖括号和合法标识符组成--><students><!--标签必须成对出现,前边的是开始标签,后边的是结束标签--><student></student><!--特殊的标签可以不成对,但是必须有结束标记--><address/><!--标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号引起来--><student id="1"></student><!--<标签需要正确的嵌套,这是正确的:--><student id="1"><name>张三</name></student><!--这是错误的:--><student id="1"><name>张三</student></name></students>
语法规则:
  1. XML文件的后缀名为:xml
  2. 文档声明必须是第一行第一列
  3. <?xml version=“1.0” encoding=“UTF-8” standalone=“yes”?>
  • version:该属性是必须存在的,这里是版本的意思,必须是1.0
  • encoding:该属性不是必须的,告诉使用者打开当前xml文件的时候应该是使用什么字符编码表(一般取值都是UTF-8)
  • standalone: 该属性不是必须的,描述XML文件是否依赖其他的xml文件,取值为yes/no(yes表示是独立的不依赖)
  1. 必须存在一个根标签,有且只能有一个
  2. XML文件中可以定义注释信息
  3. XML文件中可以存在以下特殊字符
&lt;     <     小于 
&gt;     >     大于 
&amp;    &     和号 
&apos;   '     单引号 
&quot;   "     引号
Document常用方法:
方法名功能说明
Element getRootElement()通过文档对象得到根元素
String getName()获取元素名
List<Element> elements()获取所有子元素
List<Element> elements(String name)获取知名名字的多个子元素
获取文本内容:

通过元素对象得到文本字符串得到文本元素的前提:先得到元素对象
空格、换行、制表符:也是属于文本的一部分,所以在解析xml文件的时候,格式化XML文件要注意。

元素中得到文本有关的方法

Element**元素中的方法说明
String getText()得到元素中文本
String elementTextTrim(元素名)得到子元素中文本,去掉先后空格
String elementText(元素名)得到子元素中文本
Attribute常用方法:
方法名功能说明
String getName()得到属性的名字
String getValue()得到属性的值

得到属性值的两种方式

  1. 先得到Attribute对象,再通过Attribute对象得到属性的值
  2. 通过方法attributeValue()直接得到属性值
解析xml:

DOM(Document Object Model)文档对象模型:就是把文档的各个组成部分看做成对应的对象。 会把xml文件全部加载到内存,在内存中形成一个树形结构,再获取对应的值(说白了就跟洋葱一样,一层一层的获取,先获取根标签,再获取子标签,再获取对应的值)

在这里插入图片描述
常见的解析工具:

JAXP: SUN公司提供的一套XML的解析的API
JDOM: 开源组织提供了一套XML的解析的API-jdom
DOM4J: 开源组织提供了一套XML的解析的API-dom4j,全称:Dom For Java
pull: 主要应用在Android手机端解析XML

解析的准备工作:

  1. 下载dom4j:https://dom4j.github.io/

  2. 将提下载好的dom4j-1.6.1.zip解压,找到里面的dom4j-1.6.1.jar

  3. 在idea中当前模块下新建一个libs文件夹,将dom4j-1.6.1.jar包复制到文件夹中

  4. 选中jar包 -> 右键 -> 选择add as library即可
    在这里插入图片描述

xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!--存储多个学生对象的信息-->
<students><student id="1"><name>韩信</name><age>99</age></student><student id="2"><name>李白</name><age>98</age></student>
</students>

学生类:

public class Student {private String id;private String name;private int age;public Student() {}public Student(String id, String name, int age) {this.id = id;this.name = name;this.age = age;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"id='" + id + '\'' +", name='" + name + '\'' +", age=" + age +'}';}
}

解析类:

public class XmlTest {public static void main(String[] args) throws FileNotFoundException, DocumentException {// 获取解析器对象SAXReader saxReader = new SAXReader();// 利用解析器把xml文件加载到内存中,并返回一个文档对象Document document = saxReader.read(new FileInputStream("src/xml/demo.xml"));// 获取到根标签Element rootElement = document.getRootElement();// 获取子标签List<Element> elements = rootElement.elements("student");ArrayList<Student> list = new ArrayList<>();// 遍历集合for (Element element : elements) {// 获取id的内容Attribute id = element.attribute("id");String idValue = id.getValue();// 获取name的内容// element:获取指定的子标签Element name = element.element("name");String nameText = name.getText();// 获取age的内容Element age = element.element("age");String ageText = age.getText();// 添加学生到集合Student student = new Student(idValue, nameText, Integer.parseInt(ageText));list.add(student);}// 遍历集合for (Student student : list) {System.out.println(student);}}
}
DTD约束:

什么是约束:

用来限定xml文件中可使用的标签以及属性

编写DTD约束步骤

  1. 创建一个文件,这个文件的后缀名为.dtd
  2. 看xml文件中使用了哪些元素 <!ELEMENT> 可以定义元素
  3. 判断元素是简单元素还是复杂元素
  • 简单元素:没有子元素。
  • 复杂元素:有子元素的元素;
DTD语法规则:

定义元素规则:

在这里插入图片描述
定义属性规则:

定义一个属性的格式为:<!ATTLIST 元素名称 属性名称 属性的类型 属性的约束> 属性的类型: CDATA类型:普通的字符串

属性的约束:

#REQUIRED: 属性必须要写
#IMPLIED: 属性不是必需的
#FIXED value:属性值是固定的

引入DTD约束:

dtd约束文件

<!ELEMENT persons (person+)><!ELEMENT person (name,age)><!--#PCDATA:表示值是字符串--><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)><!ATTLIST person id CDATA #REQUIRED><!ATTLIST person id CDATA #IMPLIED><!ATTLIST person id CDATA #FIXED value "a">

引入本地dtd:

<!DOCTYPE 根元素名称 SYSTEM ‘DTD文件的路径’>

<?xml version="1.0" encoding="UTF-8" ?>
<!--引入本地dtd-->
<!DOCTYPE persons  SYSTEM 'demo.dtd'>
<persons><person id="01"><name>韩信</name><age>99</age></person><person id="02"><name>李白</name><age>98</age></person>
</persons>

在xml文件内部引入:

<!DOCTYPE 根元素名称 [ dtd文件内容 ]>

<?xml version="1.0" encoding="UTF-8" ?>
<!--内部-->
<!DOCTYPE persons  [<!ELEMENT persons (person+)><!ELEMENT person (name,age)><!--#PCDATA:表示值是字符串--><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)><!ATTLIST person id CDATA #REQUIRED>]>
<persons><person id="01"><name>韩信</name><age>99</age></person><person id="02"><name>李白</name><age>98</age></person>
</persons>

引入网络dtd:
<!DOCTYPE 根元素的名称 PUBLIC “DTD文件名称” “DTD文档的URL”>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
schema约束:

schema和dtd的区别

  1. schema约束文件也是一个xml文件,符合xml的语法,这个文件的后缀名.xsd
  2. 一个xml中可以引用多个schema约束文件,多个schema使用名称空间区分(名称空间类似于java包名)
  3. dtd里面元素类型的取值比较单一常见的是PCDATA类型,但是在schema里面可以支持很多个数据类型
  4. schema 语法更加的复杂
  5. schema文件用来约束一个xml文件,同时也被别的文件约束着

编写schema约束步骤:

  1. 创建一个文件,这个文件的后缀名为.xsd。
  2. 定义文档声明
  3. schema文件的根标签为:
  4. 定义属性: xmlns=http://www.w3.org/2001/XMLSchema
  5. 定义属性 : targetNamespace =唯一的url地址,指定当前这个schema文件的名称空间。
  6. 定义属性 :elementFormDefault=”qualifified“,表示当前schema文件是一个质量良好的文件。
  7. 通过element定义元素
  8. 判断当前元素是简单元素还是复杂元素

xml文件

<?xml version="1.0" encoding="UTF-8" ?><personsxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http:www.itzhuzhu.com"xsi:schemaLocation="http:www.itzhuzhu.com persons.xsd"
><person id="001"><name>张三</name><age>23</age></person>
</persons>

xsd约束文件

<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="http:www.itzhuzhu.com"elementFormDefault="qualified"
><!--定义persons复杂元素--><element name="persons"><complexType><sequence><!--定义person复杂元素--><element name="person"><complexType><sequence><!--定义name和age简单元素--><element name="name" type="string"></element><element name="age" type="string"></element></sequence><!--定义属性,required( 必须的)/optional( 可选的)--><attribute name="id" type="string" use="required"></attribute></complexType></element></sequence></complexType></element>
</schema>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux arm current_thread_info定义,linux 内核 current全局变量

在内核的API里经常能够见到一个指针current&#xff0c;它表示的是当前的进程(如果说是一个全局变量虽然不合理&#xff0c;但更容易理解)&#xff0c;current内核路径为&#xff1a;include\asm-generic\current.hcurrent当前进程具体定义&#xff1a;#ifndef __ASM_GENERIC_C…

xml中的Document和Attribute

1.Document 导入dom4j的步骤 去官网下载 zip 包。http://www.dom4j.org/ 在项目中创建一个文件夹&#xff1a;lib将dom4j-2.1.1.jar文件复制到 lib 文件夹在jar文件上点右键&#xff0c;选择 Add as Library -> 点击OK在类中导包使用 得到Document对象 步骤&#xff1a;…

linux here用法,linux shell的here document用法(cat EOF)

什么是Here Document?Here Document 是在Linux Shell 中的一种特殊的重定向方式&#xff0c;它的基本的形式如下cmd << delimiterHere Document Contentdelimiter其作用是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数;比如在终端中…

shell脚本中的条件测试if中的-z到-d的意思

文件表达式if [ -f file ] 如果文件存在if [ -d ... ] 如果目录存在if [ -s file ] 如果文件存在且非空 if [ -r file ] 如果文件存在且可读if [ -w file ] 如果文件存在且可写if [ -x file ] 如果文件存在且可执行 整数变量表达式if [ int1 -eq i…

XPath表达式

什么是XPath XPath&#xff1a;路径表达式 作用&#xff1a;在DOM解析XML时&#xff0c;通过XPath表达让解析更加简单 XPath表达式分类 绝对路径相对路径全文搜索属性查找 什么是Node对象 DOM树中的每个节点就是Node dom4j中与XPath相关的方法 注&#xff1a;使用XPat…

最详细MySQL的安装与介绍Windows

数据库的安装&#xff1a; 打开下载的mysql安装⽂件双击解压缩&#xff0c;运⾏“mysql-5.5.40-win32.msi”。 选择安装类型&#xff0c;有“Typical&#xff08;默认&#xff09;”、“Complete&#xff08;完全&#xff09;”、“Custom&#xff08;⽤户⾃定义&#xff09;”…

linux怎么修改bash,Linux操作系统中如何对Bash变量内容修改?

我们知道两种对变量取胜的方法&#xff1a;echo $HOME echo ${HOME}在echo ${variable}的方法中&#xff0c;还可以对变量的内容进行修改&#xff0c;只要加上一些字符标志&#xff0c;后面再接着使用比对字符串&#xff0c;就可以修改变量的内容了。假设变量名为&#xff1a;v…

读懂基础机器学习算法

本篇内容主要是面向机器学习初学者&#xff0c;介绍常见的机器学习算法&#xff0c;当然&#xff0c;欢迎同行交流。 哲学要回答的基本问题是从哪里来、我是谁、到哪里去&#xff0c;寻找答案的过程或许可以借鉴机器学习的套路&#xff1a;组织数据->挖掘知识->预测未来。…

在c语言中有函数leapyear定义如下,职业教育概论——职业教育的发展历史超星尔雅答案题库...

职业职业展历有时候,文学造诣高的中国诗歌翻译者在用词华丽方面超过莎士比亚。有int型变量x&#xff0c;教育教育i&#xff0c;j&#xff0c;k&#xff0c;则表达式x(i5,j6,k7)的值为( )从数据表student中查询张姓的所有学生&#xff0c;概论正确的SQL语句是( )史超世界上第一个…

tomcat安装启动配置

服务器&#xff1a; 服务器的概念非常的广泛&#xff0c;它可以指代一台特殊的计算机&#xff08;相比普通计算机运行更快、负载更高、价格更贵&#xff09;&#xff0c;也可以指代用于部署网站的应用。我们这里说的服务器&#xff0c;其实是web服务器&#xff0c;或者应用服务…

JS在页面限制checkbox最大复选数

应该是挺简单的代码, 记录一下分享. 首先最直接的想法就是使用循环, 用局部变量记录已选的checkbox, 达到最大值就将余下的checkbox都禁止选择, 例如以下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""> <html xmlns"…

c语言 二维数组 文库,c语言二维数组练习题

c语言二维数组练习题 (3页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;19.90 积分完成下列程序代码完成下列程序代码1、 将二维数组(5 行 5 列)的右上半部分置零。 即&#xff1a;1234510000678910…

Mysql基础语法DDL、DML、DQL

DDL&#xff1a; DDL(Data Definition Language)数据定义语言用来定义数据库对象&#xff1a;数据库&#xff0c;表&#xff0c;列等。关键字&#xff1a;create, drop,alter 等 DML语句操作关键字添加INSERT INTO 表名 (字段名) VALUES (值);修改UPDATE 表名 SET 字段名新的值…

UVA 12716 GCD XOR(数论+枚举+打表)

&#xfeff;&#xfeff;题意&#xff1a;给你一个N&#xff0c;让你求有多少组A,B, 满足1< B < A < N, 且 gcd(A,B) A XOR B。思路&#xff1a;首先我们能够得出两个结论&#xff1a; A-B > A%B > gcd(A, B) A xor B > A-B 所以说A xor B > A-B > …

android陀螺仪轨迹,陀螺仪轨迹法长距离管道测量精度实测分析

陀螺仪轨迹法长距离管道测量精度实测分析陀螺仪轨迹法用于非开挖管道的精准坐标与位置测量已被电力与燃气等行业逐步了解与接受&#xff0c;近两年不断被引入到城市地下管线探测及电力与燃气管道验收标准中。由于管道埋于地下往往不能眼见为实&#xff0c;作为一种新的测量方式…

codeforces 558E A Simple Task 线段树

题目链接 题意较为简单。思路&#xff1a; 由于仅仅有26个字母&#xff0c;所以用26棵线段树维护就好了&#xff0c;比較easy。 #include <iostream> #include <string> #include <vector> #include <cstring> #include <cstdio> #include <m…

android新建多个java,Java-如何在Android的警报对话框中添加多项选...

我已经在Android应用程序中创建了“同步”菜单.当我们单击“同步”警报时,打开4个复选框的布局.我想要的是让它们起作用,例如,当我单击15分钟,然后自动取消单击其他选项时.Overridepublic boolean onCreateOptionsMenu(Menu menu){MenuInflater inflater getMenuInflater();in…

Spring IOC详解与配置

Spring&#xff1a; 框架&#xff1a; 具有一定功能的半成品软件&#xff0c;基于框架会节省开发成本 框架作用&#xff1a; 提高开发效率、复用性、编写规范、节约维护成本、解耦底层实现原理 Spring&#xff1a; Spring是分层的JavaSE/EE应用full-stack轻量级开源框架Sprin…

android8.0的蓝牙版本,android o 新特性详解 安卓8.0蓝牙音频增强以及更加可爱的表情包...

android 8.0什么时候推出&#xff1f;有哪些新特色&#xff1f;很多安卓用户非常想知道答案吧&#xff01;不用着急&#xff0c;下面是大麦子小编整理出来的安卓8.0新特性详解&#xff0c;希望可以帮到大家。有媒体近日曝光了有关谷歌Pixel XL 2手机会首发Android 8.0系统。现在…

操作系统介绍

操作系统&#xff1a; 操作系统(Operation System, OS)&#xff0c;是管理计算机硬件与软件资源的计算机程序&#xff0c;同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基…