advanced-day17-XML,DTD约束,schema约束及枚举,注解
Posted 是汐江呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了advanced-day17-XML,DTD约束,schema约束及枚举,注解相关的知识,希望对你有一定的参考价值。
XML的语法
1.xml是由自定义的标签组成
<开始标签>标签体</结束标签>
<自闭合标签/>
2.xml文件的语法
1)必须要有一个文档声明
<?xml version="1.0" encoding="UTF-8" ?>
2)只有一个根标签
3)特殊字符 如< > & 必须使用特殊的比较进行代替
< < 小于
> > 大于
& & 和号
' '单引号
" "引号
4)CDATA区,数据可以被原样显示,不被当做标签解析
<![CADATA[内容]]>
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student id="001">
<name>张三</name>
<age>20</age>
</student>
</students>
DOM解析
使用Java代码来识别xml中的数据,这个过程叫做xml解析。
Document对象: 表示整个xml文件
ELEMENT对象: 表示某一个标签
Arribute对象:表示属性对象
Text对象: 表中体
导入dom4j.jar包
1.在模块下新建一个lib文件夹
2.复制dom4j-1.6.1.jar到lib目录下
3.选中jar文件右键,点击Add As Library
查看dom4j提供的文档,解析xml文件
SAXReader reader = new SAXReader();
//获取整个dom数
Document document = reader.read("day17/a.xml");
//获取根标签
Element rootElement = document.getRootElement();
//获取根标签下面的子标签,子标签有多个
List<Element> list = rootElement.elements("student");
//创建用于存储Student对象的集合,解析后的数据封装为Student对象
List<Student> stuList=new ArrayList<>();
//遍历集合
for (Element element : list) {
//获取id属性的值
String id = element.attribute("id").getValue();
//获取name标签的标签体
String name = element.element("name").getText();
//获取age标签的标签体
String age = element.element("age").getText();
//把id,name,age封装为对象
Student stu=new Student(id,name,Integer.parseInt(age));
stuList.add(stu);
}
//遍历集合
for (Student student : stuList) {
System.out.println(student);
}
DTD约束
定义DTD约束文件
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
引入DTD约束到xml
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
schema约束
定义约束文件
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
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>
<attribute name="id" type="string" use="required"></attribute>
</complexType>
</element>
</sequence>
</complexType>
</xs:schema>
引入约束文件
<?xml version="1.0"?>
<note xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn person.xsd">
<person id="001">
<name>张三</name>
<age>23</age>
</person>
</note>
枚举
枚举就是把几个固定的常量列举出来。枚举本质上也是一个类,只不过这个类的对象是几个固定的值,不能让外界创建对象。
public enum Week {
//枚举项表示Week类的对象,带括号表示使用有参数构造方法, 不带括号,表示使用空参数构造方法
SUNDAY("星期日"), MONDAY("星期一"), TUESDAY,WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
private String value; //星期几
//把构造方法私有化,目的就是不让别人创建的对象
private Week() {
}
//把构造方法私有化,目的就是不让别人创建的对象
private Week(String value) {
this.value = value;
}
@Override
public String toString() {
return "Week{" +
"value='" + value + '\'' +
'}';
}
}
枚举类的方法。
public String name()
获取枚举项的名称
public int ordinal()
获取枚举项的索引
public int compareTo(E o)
比较枚举项的顺序
public String toString()
返回枚举项的名称,如果不想要枚举项的名称也可以复写这个方法。
public static T valueOf(Class<T> enumType, String name)
获取枚举项
注解
注解用来给代码添加一些额外的标注,可以写在类上,写在方法上,写在变量上。
Java的内置注解
@Override: 复写父类方法
@Deprecated: 标记这个方法过时了
@SuppressWarnings: 压制警告
自定义注解
//表示注解的存活时间,在运行时有效
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.TYPE)
public @interface Anno {
//定义注解的属性,default设置默认值
public String name();
public String methodname();
}
使用反射来解析注解
@Anno(name = "com.itheima.Teacher",methodname = "teach")
public class Demo {
public static void main(String[] args) throws Exception {
//获取Demo类的字节码
Class<Demo> clazz = Demo.class;
//获取类上的注解
Anno anno = clazz.getAnnotation(Anno.class);
//获取注解的属性
String classname = anno.name();
String methodname = anno.methodname();
//获取要执行的类的字节码
Class<?> stuClazz = Class.forName(classname);
//通过字节码创建的对象
Object obj = stuClazz.getConstructor().newInstance();
//获取方法
Method method = stuClazz.getMethod(methodname);
//执行方法
method.invoke(obj);
}
}
以上是关于advanced-day17-XML,DTD约束,schema约束及枚举,注解的主要内容,如果未能解决你的问题,请参考以下文章