技术标签: XML XML使用 XML简介 XML详解 Java基础知识
XML 应用于 Web 开发的许多方面,常用于简化数据的存储和传输。
存放数据栗子
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="p001">
<name>张三</name>
</person>
<person id="p002">
<name>李四</name>
</person>
</persons>
配置文件栗子
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5">
<servlet>
<servlet-name>HelloMyServlet</servlet-name>
<servlet-class>com.jourwon.HelloMyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloMyServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
XML文件主要由XML文档声明,元素,属性,注释,转义字符,CDATA区,处理指令组成。
<?xml version="1.0" encoding="UTF-8"?>
<?xml开头,以?>结束
;<servlet>
<web-app version="2.5">
XML 文件中注释采用:" " 这样的格式
XML 声明之前不能有注释
注释不能嵌套,比如下面不合规范:
XML中的转义字符与HTML一样。
因为很多符号已经被XML文档结构所使用,所以在元素体或属性值中想使用这些符号就必须使用转义字符,例如:“<”、“>”、“’”、“””、“&”。
转义字符 | 特殊字符 | 含义 |
---|---|---|
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ’ | 单引号 |
" | " | 引号 |
<![CDATA[
任意内容
]]>
当大量的转义字符出现在xml文档中时,会使xml文档的可读性大幅度降低。这时如果使用CDATA段就会好一些。
在CDATA段中出现的“<”、“>”、“””、“’”、“&”,都无需使用转义字符。这可以提高xml文档的可读性。
在CDATA段中不能包含“]]>”,即CDATA段的结束定界符。
用来解析引擎如何解析 XML 文档内容
比如:在 XML 文档中可以使用 xml-stylesheet 指令,通知 XML 解析引擎,应用 CSS 文件显示 XML 文档内容
<?xml-stylesheet type="text/css" href="a.css"?>处理指令必须以<? 开头,以 > 结尾
根据不同的解析方式提供的具体实现。有的解析器操作过于繁琐,为了方便开发人员,有提供易于操作的解析开发包。
XML DOM 和 HTML DOM类似,XML DOM 将 整个XML文档加载到内存,生成一个DOM树,并获得一个Document对象,通过Document对象就可以对DOM进行操作
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5">
<servlet>
<servlet-name>HelloMyServlet</servlet-name>
<servlet-class>com.jourwon.HelloMyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloMyServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
DOM中的核心概念就是节点,在XML文档中的元素、属性、文本等,在DOM中都是节点!
引入dom4j依赖
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.1</version>
</dependency>
将xml文件放到指定位置,这里放的是XML 用途配置文件栗子的内容,然后读取这个位置的xml文件,测试代码如下
public class Dome4jTest {
public static void main(String[] args) throws DocumentException {
// 1 创建核心对象(new 方式)
SAXReader saxReader = new SAXReader();
//2 加载xml文档 获得dom树(核心对象调用read读取xml文件)
Document doc = saxReader.read("E:\\IdeaProjects\\demo1\\src\\main\\resources\\demo.xml");
//3 获得根元素(文档对象下面就是根元素)
Element root = doc.getRootElement();
//4 获得子元素(根节点下所有子元素)
List<Element> list = root.elements();
for (Element e : list) {
// elementText("标签名") 获得指定名称元素的文本值 (指定标签的文本值)
// getName() 获得当前元素名
if ("servlet".equals(e.getName())) {
System.out.println(e.elementText("servlet-name"));
System.out.println(e.getName());
}
}
}
}
输出结果
HelloMyServlet
servlet
规定xml中可以出现哪些元素及哪些属性,以及他们出现的顺序
既然是约束就和xml有联系,所以约束要和xml关联,xml的相关限制才能生效。
格式:
<!DOCTYPE 根元素名 [dtd语法]>
格式:
<!DOCTYPE 根元素名 SYSTEM "约束文件的位置">
例如:
<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
举例web-app_2_3.dtd文件
<?xml version="1.0" encoding="UTF-8" ?>
<!ELEMENT web-app (servlet*, servlet-mapping* , welcome-file-list?) >
<!ELEMENT servlet (servlet-name, description?, (servlet-class|jsp-file))>
<!ELEMENT servlet-mapping (servlet-name, url-pattern) >
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT servlet-class (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
<!ELEMENT welcome-file-list (we1come-fi1e+)>
<!ELEMENT welcome-file (#PCDATA)>
<!ATTLIST web-app version CDATA #IMPLIED>
接下来xml中只能出现dtd文件中规定的特有的标签了(不能自定义自己随便写了)
ps:idea中你输入< 便会提示能够输入的标签
格式:
<!DOCTYPE 根元素名 PUBLIC "约束文件的名称" "约束文件的位置">
如mybatis中mapper的约束
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
无论是单独的dtd文件还是写在xml中(参考上面方式一)都需要按照语法要求写
再次强调下语dtd文件约束的作用:
规定xml中可以出现哪些元素及哪些属性,以及他们出现的顺序
标签(元素)语法:
<!Element 元素名称 数据类型|包含内容>
数据类型:#PCDATA:普通文本 使用的时候一般用()引起来
功能:能出现那些标签,以及出现顺序
包含内容:该元素下可以出现哪些元素 用()引起来
符号:
* 出现任意次
? 出现1次或者0次
+ 出现至少1次
| 或者
() 分组
, 顺序(元素出现先后顺序,按照都好标记顺序出现)
栗子如下:(上图约束图中的代码)
<!ELEMENT web-app (servlet*,servlet-mapping* , welcome-file-list?) >
<!ELEMENT servlet-name (#PCDATA)>
ps:元素名就是xml中能够出现的元素标签名
属相的约束语法:
属性:
格式:
<!ATTLIST 元素名 属性名 属性类型 属性是否必须出现>
属性类型:
ID:唯一
CDATA:普通文本
属性是否必须出现
REQUIRED:必须出现
IMPLIED:可以不出现
例如:
<!ATTLIST web-app version CDATA #IMPLIED>
注意:一个xml文档中只能添加一个DTD约束
一个xml文档中可以添加多个schema约束
xml和schema的关联.
格式:
<根标签 xmlns="..." ...>
<根标签 xmlns:别名="..." ...>
名称空间:
关联约束文件
规定元素是来源于那个约束文件的
例如:
一个约束文件中规定 table(表格) 表格有属性 row和col
还有一个约束文件规定 table(桌子) 桌子有属性 width和height
在同一个xml中万一我把两个约束文件都导入了,
在xml中我写一个table,这个table有什么属性????
我们为了避免这种情况的发生,可以给其中的一个约束起个别名
使用的时候若是没有加别名那就代表是来自于没有别名的约束文件
例如 table(表格) 给他起个别名 xmlns:a="..."
在案例中使用 a:table 代表的是表格
若在案例中直接使用 table 代表的是桌子
ps:在一个xml文件中只能有一个不起别名;
注意:
schema约束本身也是xml文件.
如下一个xml scheam的约束文档,我们创建xml时如果有相应的约束 直接引进约束就行。
<?xml version="1.0" encoding="UTF-8"?>
<!--
模拟servlet2.5规范,如果开发人员需要在xml使用当前Schema约束,必须包括指定命名空间。
格式如下:
<web-app xmlns="http://www.example.org/web-app_2_5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
version="2.5">
-->
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/web-app_2_5"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.example.org/web-app_2_5"
elementFormDefault="qualified">
<xsd:element name="web-app">
<xsd:complexType>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="servlet">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="servlet-name"></xsd:element>
<xsd:element name="servlet-class"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="servlet-mapping">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="servlet-name"></xsd:element>
<xsd:element name="url-pattern"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="welcome-file-list">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="welcome-file" maxOccurs="unbounded"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:choice>
<xsd:attribute name="version" type="double" use="optional"></xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
文章浏览阅读1.2k次,点赞18次,收藏15次。斗鱼、wasm、js逆向、web逆向。_某鱼 逆向
文章浏览阅读737次。由于中大的oj需要内网才能进去,就提供不了原始题目了,但是题目的意思就是说,开始有一对成年兔子,一对成年兔子每年能生一对幼兔,幼兔等m个月才成长为成年兔子,问d个月后总共有多少对兔子。输入m d 2 3 3 5 1 100输出 5 9 100题目意思相信大家都能明白,那么解题思路又是怎么样的呢我来大概说一下,先找到兔子增长_中大oj
文章浏览阅读1.5k次,点赞40次,收藏34次。【代码】C程序设计第五版谭浩强 || 第四章习题答案
文章浏览阅读161次。CPO-CNN-LSTM分类预测,【24新算法】冠豪猪算法CPO优化卷积神经网络-长短期记忆网络多特征分类预测
文章浏览阅读1.4k次。这样,就可以在CentOS系统中使用普通用户身份来管理和启动Nginx服务了。请注意,对于其他需要管理员权限才能完成的操作(如修改系统文件等),还需要使用sudo命令或者切换到管理员账户进行操作。下载并安装Nginx,保证Nginx可执行文件所在的路径对普通用户具有可读、可执行的权限。安装过程中,在指定 Nginx 配置文件路径时要特别注意,确保可访问并正确填写。启动Nginx服务。是您实际安装Nginx时配置文件存放的路径。_nginx用什么用户启动
文章浏览阅读6.8k次。问题描述:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]在调用<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>时出现异常调用tomcat服务器时,页面出错:原因分析:首先确认导入的jar包是否正确经过多次导包还是老样子,在网上也找了挺多方法,但都不凑效解决方案:方案一:重新导入jar包如果是jar包缺失_无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[h
文章浏览阅读258次。一 前言最近我们的檀神在学习python时提了一个很好的问题,让我觉得有必要把它梳理下分享给更多的学习者。剧情回顾:檀神安装了python3的版本,想在我16年基于python2写的工具的基础上增加功能,但发现工具的一个模块还不支持python3。这就尴尬了,是要重装python2的版本?还是用python3的模块重写工具?不管哪种方式,似乎都挺折腾。其实,这只是python..._launching subshell in virtual environment... windows powershell 版权所有(c)
文章浏览阅读6w次,点赞12次,收藏65次。工作中用到一段比较复杂的SQL查询脚本,使用了listagg()函数实现了具有多个值的字段的填充(即,列表聚合,list aggregation(我猜的))。说简单点,listagg()函数可以实现多列记录聚合为一条记录,从而实现数据的压缩、致密化(data densification)。以下内容转载自http://dacoolbaby.iteye.com/blog/1698957,SQL脚本做了..._oracle9 listagg
文章浏览阅读1.9k次,点赞41次,收藏32次。通过上篇文章《MySQL的体系结构与SQL的执行流程》了解了SQL语句的执行流程以及MySQL体系结构中**「连接器」「SQL接口」「解析器」「优化器」「执行器」**的功能以及在整个流程中的作用。不过上篇文章留了个尾巴,在执行器调用存储引擎后,存储引擎内部做了什么事没有进一步说明,本文会对此展开介绍,使得我们对SQL整体的执行流程有更加清晰的认识。先了解下存储引擎是干什么的。
文章浏览阅读93次。超简单灌木教程~零基础神马的都能神还原哦!优动漫PAINT下载:http://wm.makeding.com/iclk/?zoneid=18597想要Get到更多有关优动漫的信息包括软件下载,可关注优动漫PAINT中文官网哦!转载于:https://www.cnblogs.com/danzi/p/8527177.html..._优动漫边缘上色
文章浏览阅读716次,点赞24次,收藏27次。Channel与BufferJava NIO系统的核心通道(Channel)和缓冲区(Buffer)。通道表示打开到 IO 设备(例如:文件、套接字)的连接。若需要使用 NIO 系统,需要获取用于连接 IO 设备的通道以及用于容纳数据的缓冲区。然后操作缓冲区,对数据进行处理简而言之,通道负责传输,缓冲区负责存储常见的Channel有以下四种,其中FileChannel主要用于文件传输,其余三种用于网络通信Buffer有以下几种,其中使用较多的是ByteBufferByteBuffer。
文章浏览阅读2.1k次,点赞3次,收藏5次。VS 设置 C# 以下划线 _ 开头命名全局字段设置方法之前在某位大神的博客有看到这个设置方法,换电脑以后再找那个文章却找不到了,按回忆找到了设置方法,故写出来分享给大家。private readonly SearchResult _searchResult;设置方法以2019企业版为例,找到:工具 - 选项 - 文本编辑器 - C# - 代码样式 - 命名点击“管理命名样式”,然后再点左下角加号,新建一个命名规范,标题可以自己拟定,设置“必填前缀”为“_”,选择“camel 事例名称”,确_visual studio 命名规则以_开头给