zoukankan      html  css  js  c++  java
  • xml学习

    XML基础

    定义:

    可扩展的标签语言。

    作用:

    配置文件

    XML解析:

    XML解析方式:

      1.sax:特点:逐行解析,只能查询。

      2.dom:特点:一次性将文档加载到内容中,形成一个dom树,可以对dom树进行curd操作。

    解析技术:

    ★dom4j:比较常用的解析开发包,hibernate底层采用。

    dom4j技术进行查询操作.
    使用步骤:
    1.导入jar包
    2.创建一个核心对象 SAXReader
    new SAXReader();
    3.将xml文档加载到内存中形成一棵树
    Document doc=reader.read(文件路径)//注意文件路径在写/的时候注意需要转义为//
    4.获取根节点
    Element root=doc.getRootElement();
    5.通过根节点就可以获取其他节点(文本节点,属性节点,元素节点)
    获取所有的子元素
    List<Element> list=root.elements()
    获取元素的指定属性内容
    String value=root.attributeValue("属性名");
    获取子标签标签体:遍历list 获取到每一个子元素
    String text=ele.elementText("子标签名称")

    代码:

     1 package com.uestc;
     2 import java.util.List;
     3 import org.dom4j.Document;
     4 import org.dom4j.Element;
     5 import org.dom4j.io.SAXReader;
     6 public class Dom4jDemo {
     7     public static void main(String[] args) throws Exception 
     8     {   //创建核心对象
     9         SAXReader reader=new SAXReader();
    10         //获取dom树
    11         Document doc=reader.read("D:\workspace\test1\xml\web.xml");
    12         //获取根节点
    13         Element root=doc.getRootElement();
    14         //获取其他节点
    15         List<Element> list=root.elements();
    16         //遍历集合
    17         for(Element ele :list)
    18         {
    19             //获取servlet-name的标签体
    20             String text=ele.elementText("servlet-name");
    21             //获取url-pattern的标签体
    22             System.out.println(text);
    23             System.out.println(ele.elementText("url-pattern"));
    24         }
    25         String value=root.attributeValue("version");
    26         System.out.println(value);
    27             //获取root的version属性值
    28     }
    29 
    30 }

    输出:

    HelloMyServlet
    null
    HelloMyServlet
    /hello
    2.5

    xpath解析技术:(扩展)

    依赖于dom4j 使用步骤:
    1.导入jar包(dom4j和jaxen-1.1-beta-6.jar)
    2.加载xml文件到内存中
    3.使用api
    selectNode("表达式");
    selectSingleNode("表达式");
    表达式的写法:
    / 从根节点选取
    // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
    例如一个标签下有一个id属性且有值 id=2;
    //元素名[@属性名='属性值']
    //元素名[@id='2']

    代码:

     1 package com.uestc.xpath;
     2 import java.util.List;
     3 import org.dom4j.Document;
     4 import org.dom4j.DocumentException;
     5 import org.dom4j.Element;
     6 import org.dom4j.io.SAXReader;
     7 
     8 public class XpathDemo {
     9     public static void main(String[] args) throws DocumentException
    10     {
    11         //加载dom树
    12         Document doc=new SAXReader().read("D:\workspace\test1\xml\web.xml");
    13         //获取节点
    14         //List<Element> list=doc.selectNodes("/web-app/servlet/servlet-name");//servlet-mapping/url-pattern
    15         //Element ele=list.get(0);
    16         Element list=(Element) doc.selectSingleNode("//url-pattern");
    17         System.out.println(list.getText());
    18     }
    19 
    20 }

    反射:

    1.获取对应的class对象
    方式1:★
    Class clazz=Class.forName("全限定名");
    方式2:
    Class clazz=类名.class;
    方式3:
    Class clazz==对象.getClass();
    2.通过class对象创建一个实例对象(相当于 new 类())
    Object clazz.newInstance();
    3.通过class对象获取一个方法(public修饰的)
    Method method=clazz.getMethod("方法名",Class .... paramType);
    paramType为参数的类型
    4.让方法执行:
    method.invoke(Object 实例对象,Object ... 参数);
    Object 实例对象:以前调用方法的对象 就是a
    Object ... 参数:该方法运行时需要的参数 就是 10和30
    执行这个方法 相当于
    a.add(10,30);
    例如:
    method.invoke(a,10,30)

    代码:

     1 package com.uestc;
     2 public class HelloMyServlet {
     3     public void add(){
     4         System.out.println("空参add方法");
     5     }
     6     
     7     public void add(int i,int j){
     8         System.out.println("带有连个add方法");
     9         System.out.println(i+j);
    10     }
    11     
    12     public int add(int i){
    13         return i+10;
    14     }    
    15 }
     1 package com.uestc.reflect;
     2 
     3 import java.lang.reflect.Method;
     4 
     5 import org.junit.Test;
     6 
     7 
     8 import com.uestc.HelloMyServlet;
     9 
    10 public class demo {
    11 
    12     public void f1()
    13     {
    14         HelloMyServlet a=new HelloMyServlet();
    15         a.add();
    16         a.add(10, 5);
    17     }
    18     
    19     public void f2() throws ClassNotFoundException, InstantiationException, IllegalAccessException
    20     {
    21         Class clazz=Class.forName("com.uestc.HelloMyServlet");
    22         //通过字节码对象创建一个实例对象(相当于调用空参的构造器)
    23         HelloMyServlet a=(HelloMyServlet) clazz.newInstance();
    24         a.add();
    25     }
    26     @Test
    27      public void f3() throws Exception
    28      {   //得到字节码对象
    29          Class clazz=Class.forName("com.uestc.HelloMyServlet");
    30          //通过字节码对象创建一个实例对象(相当于调用空参的构造器)
    31          HelloMyServlet a=(HelloMyServlet) clazz.newInstance();
    32         //获取方法对象
    33          Method method=clazz.getMethod("add");
    34         //让方法对象执行   obj调用这个方法的实例,相当于a  ,args是该方法执行时候所需要的参数   a.add()
    35         method.invoke(a);//相当于 a.add() 
    36      }
    37         
    38          public void f4() throws Exception
    39          {   
    40             //获取class对象
    41             Class clazz=HelloMyServlet.class;
    42              //通过字节码对象创建一个实例对象(相当于调用空参的构造器)
    43              HelloMyServlet a=(HelloMyServlet) clazz.newInstance();
    44             //获取有两个参数的add方法
    45              Method m=clazz.getMethod("add", int.class,int.class);
    46             //执行方法
    47              m.invoke(a, 0,10);
    48             
    49          }
    50 }

    xml约束:

    作用:规定xml中可以出现那些元素及那些属性,以及他们出现的顺序.
    约束的分类:
    DTD约束:struts hiebernate等等
    SCHEMA约束:tomcat spring等等

    DTD约束:

    和xml的关联 (一般都会提供好,复制过来即可,有时候连复制都不需要.)
    方式1:内部关联
    格式:
    <!DOCTYPE 根元素名 [dtd语法]>
    方式2:外部关联-系统关联
    格式:
    <!DOCTYPE 根元素名 SYSTEM "约束文件的位置">
    例如:
    <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
    方式3:外部关联-公共关联
    格式:
    <!DOCTYPE 根元素名 PUBLIC "约束文件的名称" "约束文件的位置">

    dtd语法(了解)

    元素:

    <!Element 元素名称 数据类型|包含内容>

    数据类型:

    #PCDATA:普通文本 使用的时候一般用()引起来
    包含内容:
    该元素下可以出现那些元素 用()引起来
    符号:
    * 出现任意次
    ? 出现1次或者0次
    + 出现至少1次
    | 或者
    () 分组
    , 顺序

    属性:
    格式:
    <!ATTLIST 元素名 属性名 属性类型 属性是否必须出现>
    属性类型:
    ID:唯一
    CDATA:普通文本
    属性是否必须出现
    REQUIRED:必须出现
    IMPLIED:可以不出现

    一个xml文档中只能添加一个DTD约束
    xml的学习目标:
    编写一个简单的xml文件
    可以根据约束文件写出相应xml文件.
    按f2或者 alt+/提示写出内容即可

    SCHEMA约束

    一个xml文档中可以添加多个schema约束
    xml和schema的关联.
    格式:
    <根标签 xmlns="..." ...>
    <根标签 xmlns:别名="..." ...>
    名称空间:
    关联约束文件
    规定元素是来源于那个约束文件的
    例如:
    一个约束文件中规定 table(表格) 表格有属性 row和col
    还有一个约束文件规定 table(桌子) 桌子有属性 width和height

    在同一个xml中万一我把两个约束文件都导入了,
    在xml中我写一个table,这个table有什么属性????
    我们为了避免这种情况的发生,可以给其中的一个约束起个别名
    使用的时候若是没有加别名那就代表是来自于没有别名的约束文件
    例如 table(表格) 给他起个别名 xmlns:a="..."
    在案例中使用 a:table 代表的是表格
    若在案例中直接使用 table 代表的是桌子
    在一个xml文件中只能有一个不起别名;
    注意:
    schema约束本身也是xml文件.

  • 相关阅读:
    一、docker安装CentOS7
    c#使用资源文件完成国际化
    .netcore 读取ansi编码
    省市区数据库
    .netcore2.0发送邮件
    使用py,根据日志记录自动生成周报
    mysql监控每一条执行的sql语句
    根据json生成c#实体类
    使用.net core efcore根据数据库结构自动生成实体类
    winform,同个程序只允许启动一次
  • 原文地址:https://www.cnblogs.com/jinxingerhuo/p/7284411.html
Copyright © 2011-2022 走看看