Java基础之XML_xml第0列-程序员宅基地

### BeanUtil操纵的是javaBean的属性!!!属性!!属性!!(注意属性不等于字段,字段是成员变量)
1. copyProperties()方法是用来拷贝javaBean的,这两个javaBean可以是不同类的对象,方法会给两个对象中的相同属性赋值,不同的属性不管


### BeanUtils工具的概述和使用
* JavaBean的概述
* 只要满足了以下三个条件的类就是JavaBean
* 必须由public修饰的
* 必须有无参数构造方法
* 必须为属性提供setter & getter方法


* 两个重要的概念
* 字段:就是成员变量名
* 属性:
* 通过setter或getter方法获得
* setName()-->去掉set-->Name()———>首字母小写-->name
* 一般情况下,属性名就是成员变量名。


* BeanUtils的概述
* 是Apache组织开发的一款产品
* 是一款方便操作JavaBean的工具类。


* BeanUtils工具可以对JavaBean进行哪些操作
* 可以对JavaBean的属性进行赋值和取值。
* 可以将一个JavaBean属性拷贝给另一个JavaBean对象中。
* 可以将一个Map集合的数据拷贝到一个JavaBean对象中。


* BeanUtils常用方法
* setProperty(Object obj,String name,Object value)
* 给对象obj的name属性赋值为value
* 如果属性不存在,则什么也不发生。

* getProperty(Object obj,String name)
* 获得指定对象obj的name 属性值
* 如果属性不存在,则抛出异常


* getProperty(Object obj,String name,String defaultValue)
* 获得指定对象obj的name 属性值
* 如果属性不存在,则返回默认值


* copyProperties(Object dest, Object orig)   
* 将对象orig的属性值拷贝到对象dest
* '后付钱' ==> 后面赋值前面
* 不同类创建的对象也可以进行拷贝,只能拷贝相同属性的值。
 
* populate(Object bean, Map<String,String[]> properties)   
* 将properties中的数据封装到bean对象中
* 如果属性类型是字符串,值是字符串数组时,则会将字符串数组的第一个元素取出赋值给属性。


* Map BeanUtils.describe(Object bean)
* 将对象bean转换map集合,会多一个class的键值对。


#### BeanUtil的注意事项
1. 如果有时间类型的变量,即Date类型的变量,复制时,需要导入beanUtil包下的日期转换器类
2. 创建日期转换器类DateConverter dateC = new DateConverter();
3. 设置日期转换格式:dateC.setPatterns(new String[]{"yyyy年MM月dd日","yyyy-MM-dd日"});
4. 注册日期转换器:ConvertUtils.register(dateC, Date.class);
5. 这样在复制bean时,才会按照我们制定的格式转换,不然出异常。
6. !!!!!!!!!!使用Date类时一定要注意导包,有两个Date类,不要导错了包。!!!!


### XML的概述
* 概述
* XML是一门语言,全称:eXtensible Markup Language 可扩展标记语言
* 用来描述数据结构,标记又叫标签
* 开始标签和结束标签,比如 <name> 开始标签   </name> 结束标签
* XML出身名门,有w3c组织制定,微软和Googel大力推荐使用的一种数据格式


* 特点
* 一个XML中只能有一个根标签
* 标签中可以有属性
* 开始标签和结束标签要成对出现。
* 标签名严格区分大小写,比如 <A> 或 <a> 是完全不同的标签




* 作用
* 可以当成一个小型数据库使用
* 作用框架的配置文件(Structs.xml,hibernate.cfg.xml)
* 用于不同平台之间进行数据交换。


* 存储联系人信息
<通讯录>
<联系人 id="1">
<Name>张三</name>
<电话>13434567</电话>
<邮箱>[email protected]</邮箱>
</联系人>
<联系人 id="2">
<姓名>张三</姓名>
<电话>13434567</电话>
<邮箱>[email protected]</邮箱>
</联系人>
<联系人>
<姓名>张三</姓名>
<电话>13434567</电话>
<邮箱>[email protected]</邮箱>
</联系人>
<联系人>
<姓名>张三</姓名>
<电话>13434567</电话>
<邮箱>[email protected]</邮箱>
</联系人>
</通讯录>


### XML语法概述
* XML语法有以下几部分组成
* 文档声明
* 标签(元素)
* 属性
* 注释
* 转义字符
* CDATA区
* 处理指令(几乎不用了)


* XML文件的后缀名:xml


### XML语法之文档声明
* 格式
* <?xml version="1.0" encoding="UTF-8"?>
最简单文档声明格式:<?xml version="1.0"?>
* 两个属性
* version:版本号,有两个选择1.0或1.1 推荐1.0
* encoding:编码方式,常用的编码方式:gbk和UTF-8


* 注意事项
* encoding属性是可选属性,version属性是必须要有的,不能省略
* version必须是第一个属性,encoding是第二个属性。
* 文档声明的语句必须处于XML文档的第0行第0列


### XML语法之标签(元素)
* 语法
* <标签名>标签内容</标签名>
* 比如 <name>jack</name>
* 分类
* 有主体标签:有内容的标签,比如 <name>jack</name>
* 无主体标签:没有内容的标签 比如 <br/>


* 标签名的命名规则
* 严格区分大小写
* 不能以数字开头,只能使用英文字母,中文,下划线等字符开头
* 不用使用:号作为标签名,因为:是命名空间的特殊符号。
* 特殊符号要进行转义
* 标签名不用使用空格分割


* 注意事项
* 标签可以嵌套标签,但必须合理嵌套,不能交叉嵌套。

### XML语法之属性
 * 语法
  * <标签名 属性名=属性值>标签内容</标签名>
  * <name id='9527'>jack</name>


 * 注意事项
  * 属性只能出现在开始标签中
  * 属性值必须使用引号引起来,可以单引号也可以双引号,但是不能单双混用
  * 一个标签中可以有多个属性,多个属性不能出现同名的情况。


### XML语法之注释
 * 语法
  * <!-- 注释内容 --> 


 * 注意事项
  * 注释不能嵌套
  * 注释不能出现在文档声明之前


### XML语法之转义字符
 * 为什么要转义
  * 有些字符在XML文档中是有特殊含义,如果想原样输出,则必须对该字符进行转义。


 * 语法
  * 以 & 开头,以 ; 结束


 * 常见的转义字符
  * &lt;  <  小于符号
  * &gt;  >   大于符号
  * &quot; "  双引号
  * &apos; ' 单引号
  * &amp;  & 


### XML语法之CDATA区
 * CDATA全称Character Data 字符数据
 * 语法
  * <![CDATA[
  // 字符数据
  ]]>


 * 作用
  * 能够保证数据不会被解析器解析,会原样输出。


### XML约束的概述
* XML约束的概念
* 用来约束XML文档中可以使用哪些标签,标签有哪些属性,属性有哪些取值。


* 约束作用
* 描述XML文档结构
* 让XML文档书写更加规范


* 约束的分类
* DTD约束
* DTD文件是一个文本文件
* 数据类型比较单一,语法简单
* 应用场景:structs.xml hibernate.cfg.xml
* 后缀名:dtd


* Schema约束
* Schema约束文件本身也是一个XML文件
* 数据类型比较丰富,语法复杂
* 应用场景:Spring配置文件,tomcat的web.xml
* 后缀名:xsd


### DTD约束-文档声明(应用形式)


* DTD约束分类
* 内部DTD:约束内容写在XML文档中(几乎不用了)
* 外部DTD:专门有一个文件来写约束(推荐使用)


* DTD文件的两种引用方式
* SYSTEM
* 格式:
* <!DOCTYPE 根元素 SYSTEM  "DTD文件的地址">
* 含义
* 该dtd约束文件是属于个人或某个组织的,不公开使用,使用范围比较窄。


* PUBLIC
* 格式:
* <!DOCTYPE 根元素 PUBLIC "DTD文件描述" "DTD文件的地址">
* 比如: <!DOCTYPE struts PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
 "http://struts.apache.org/dtds/struts-2.1.dtd">
  * 含义
  * 该dtd文件是公开使用的,使用范围比较广范。




### DTD约束之元素约束(标签)
* 元素约束的语法
* <!ELEMENT 元素名  元素类别或内容>


* 元素的类别有三种
* (#PCDATA):Parsed Character Data 可被解析的字符数据,文本内容
* EMPTY:空标签 比如<br /> 的约束: <!ELEMENT br EMPTY>
* ANY:任意内容都可以
<!ELEMENT name  ANY>
<name>范德萨发</name>


* 元素的内容修饰符号
* ?:0到1次
* *: 0到n次
* +: 1到n次
* ():给内容分组
* |:代表从多个元素中选择一个
* ,:代表元素要按顺序出现


* 回答每一行的含义
  * book (title,author,price) book标签下有三个子标签,必须按顺序出现。
  * book (title|author|price) book标签下有1个子标签,必须是三个任意一个
  * book (author+) book有1到n个author子标签
  * book (author*) book有0到n个author子标签
  * book (author?) book有0到1个author子标签
  * book (author)  book有1个author子标签


### DTD约束之属性约束
* 属性约束语法
*  <!ATTLIST 标签名 
属性名 属性类型  类型选项
属性名 属性类型  类型选项
属性名 属性类型  类型选项
......
属性名 属性类型  类型选项>


* 属性类型

属性类型 说明
CDATA 字符类型(Character Data)
   (enum1|enum2|enum3)   枚举类型,属性的取值从给定的几种中选择
  ID        属性值在整个XML文件中是唯一,而且命名不能以数字开头

* 类型选项


类型选项 选项的含义
#REQUIRED 必须的属性
#IMPLIED 可选的属性
#FIXED value 属性的值是固定的,只能取value
默认值     不显示给出属性时,则该属性的值为默认值


* 属性约束案例


```java 
<!ATTLIST 作者
      姓名 CDATA  #REQUIRED
      年龄 CDATA  #IMPLIED
      职务 CDATA  #FIXED "程序员"
      爱好 CDATA  "旅游" >
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/leaves_story/article/details/79178388

智能推荐

you_get多进程批量下载b站视频_you-get批量下载-程序员宅基地

文章浏览阅读4.5k次,点赞7次,收藏31次。作为一枚码农,下载b站的时候以前虽然知道用you-get,但是还是想批量进行下载you-get虽然可以在命令行直接下载,但是这样很费事,还是想写在一个python文件这样方便我注意到you-get是可以开多个窗口同时下载的,这样可以提高下载速度的,不信可以试一下。但是这样得开很多个窗口,这样也是很麻烦的一件事。然后就想到了,干脆直接在python文件里做成多进程算了。直接看代码..._you-get批量下载

《炬丰科技-半导体工艺》 3D-TSV集成的材料和工艺研究进展_tsv工艺-程序员宅基地

文章浏览阅读1.5k次。书籍:《炬丰科技-半导体工艺》文章:3D-TSV集成的材料和工艺研究进展编号:JFKJ-21-755摘要3D集成中的各种过程需要考虑多种材料。这些材料对于关键工艺的发展至关重要,例如穿层过孔(TSV)、晶圆和芯片键合以及晶圆处理。本文回顾了一些可变材料和工艺的最新进展,比较了它们的优势和技术挑战,并讨论了实现完全三维TSV集成的选择。介绍半导体技术是过去半个世纪中最强大的技术之一,它遵循著名的摩尔定律呈指数级发展。从单核微处理器(CPU),到双核、四核、现在的_tsv工艺

用subversion(SVN)进行版本管理 (一)_svn subversion 进行了版本控制-程序员宅基地

文章浏览阅读1k次。用subversion(SVN)进行版本管理 (转贴来自互联网 https://bbs.dreamz.org作者:upig)版本管理约定程序员编写程序的过程中,每个程序都会有很多不同的版本,这就需要程序员很好的管理代码,在需要的时间可以取出需要的版本,并且每个版本都有一个完整的说明。我们使用Sub Version(简称SVN)作为版本管理工具。这里着重介绍SVN作为跨平台的多人协作使用方法_svn subversion 进行了版本控制

python中科学计数法怎么表示_python科学计数法转换-程序员宅基地

文章浏览阅读2.9w次。python 输出数字,如何不以科学计数法输出?概述利用numpy设置输出选项即可 代码解析未使用numpy设置: import time # time 时间类 print(time*time*1000) #输出一个非常大的数字 #out: 6.30e1352 由此可以看到,默认输出是以科学计数方式输出使用numpy设置print的输出选项: impopython如何不通过格式化输出能够将一个数用..._python科学计数法

浏览器缩小出现滚动条_怎么做到缩小网页窗口时右边会多一个滑块-程序员宅基地

文章浏览阅读1.7k次。页面设置固定宽度,浏览器缩小后背景留白,裁切解决办法:_怎么做到缩小网页窗口时右边会多一个滑块

java map初始化并赋值_map初始化直接赋值-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏6次。**第一种方式:**static 块public class MapTest { private static final Map<String, String> myMap = new HashMap<String, String>(); static { myMap.put("张三", "北京"); myMap.put("李四", "上海"); }}最常规的初始化方式。第二种方式:双括号初始化 (匿名内部类)pu_map初始化直接赋值

随便推点

QPainter下绘制图像的擦除_qt擦除已绘制的图形-程序员宅基地

文章浏览阅读1.1w次,点赞5次,收藏35次。使用qt5.12.9的qml开发框架下,用QPainter绘图开发一个白板应用发现了一个问题:图案绘制完成后,想要擦除一部分已经绘制的图像,想使用eraseRect函数将绘制的图案擦除。但是背景色为一张图片,绘制图像的层就是透明色,这样可以保证绘制的图像和背景不被冲突。但是你再调用eraseRect函数对已经绘制的图案做擦除操作,会覆盖之前的图案并留下白色的填充,无法用透明色覆盖填充。解决:// point.model true:绘制红色的路径 false:清除红色的路径if(poi._qt擦除已绘制的图形

【Axure高保真原型】桥梁监控大屏可视化案例_设备实时检测axure原型案例-程序员宅基地

文章浏览阅读366次。今天和大家分享桥梁监控大屏可视化案例的原型模板,包括桥梁预警次数统计、预警类型分析、实时预警分析、通行趋势分析、通行类型分析、热门桥梁分析,里面包含多个高保真的图表模板(多柱状图组、滚动列表、多面积图、排名图、玫瑰图),具体效果可以点击下方视频观看_设备实时检测axure原型案例

自动化脚本之Debian 开机时运行通过expect自动执行串口命令_debian开机自动执行命令-程序员宅基地

文章浏览阅读3.7k次。在本文中,将探讨如何使用expect自动执行串口命令,并在Debian开机时运行这些命令。_debian开机自动执行命令

BST 二叉搜索树 非指针版_二叉搜索树无指针-程序员宅基地

文章浏览阅读863次。BST BST即为binarysearch tree 二叉搜索树为平衡树的基础,所以很要学习的必要。 BST的结点满足一个基本条件就是:结点k的左子树中所有值小于结点k的值,结点k的右子树的所有值大于结点k的值,显然这是一个递归定义的结构。 这个结构就使得中序遍历出来的序列即是一个升序的序列。一个优秀的二叉搜索树能够在log(n)的时间内进行查找、删除一个元素等。_二叉搜索树无指针

Ubuntu18.04 单网卡DHCP服务配置_ubuntu配置dhcp上网-程序员宅基地

文章浏览阅读3.3k次,点赞2次,收藏7次。DHCP Ubuntu18.04_ubuntu配置dhcp上网

pandas dataframe选取某行或列做元素相乘_dataframe乘法-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏10次。dataframe整体做乘法时,不需要借助其他方法,直接a*b即可>>> import pandas as pd>>> import numpy as np>>> a = pd.DataFrame([1,2,3])>>> b = pd.DataFrame([2,5,3])>>> a*b 00 21 102 9但是,如果想要选取某行或某列做乘法,要使用loc方法,此时则会变成矩阵乘法_dataframe乘法

推荐文章

热门文章

相关标签