c++枚举变量遍历_advancedday17XML,DTD约束,schema约束及枚举,注解

XML的语法

 1.xml是由自定义的标签组成    <开始标签>标签体结束标签>    <自闭合标签/>2.xml文件的语法    1)必须要有一个文档声明        xml version="1.0" encoding="UTF-8" ?>    2)只有一个根标签    3)特殊字符 如< > & 必须使用特殊的比较进行代替        &lt;    <   小于        &gt;    >   大于        &amp;   &   和号        &apos;  '单引号        &quot;  "引号          4)CDATA区,数据可以被原样显示,不被当做标签解析        [CADATA[内容]]>
 <?xml  version="1.0" encoding="UTF-8" ?><students>    <student id="001">        <name>张三name>        <age>20age>    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约束文件

 
  • 引入DTD约束到xml

 <?xml  version="1.0"?><note>    <to>Georgeto>    <from>Johnfrom>    <heading>Reminderheading>    <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">        <element name="persons">        <complexType>            <sequence>                                <element name = "person">                    <complexType>                        <sequence>                                                        <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"?>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn person.xsd">张三23

枚举

枚举就是把几个固定的常量列举出来。枚举本质上也是一个类,只不过这个类的对象是几个固定的值,不能让外界创建对象。

 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);    }}

712796529b5c4af42f40173b8922c4ed.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值