• java xml配置文件


    XML

    类似于properties的配置文件,全名是Extensible Markup Language,意思是可扩展的标记语言。XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的

    语法:文档声明必须以<?xml开头,以?>结尾

    文档是声明必须是0行0列

    3.文档声明只有属性:

    a) versioin:指定XML文档版本。必须属性,因为我们不会选择1.1,只会选择1.0;

    b) encoding:指定当前文档的编码。可选属性,默认值是。utf-8

    xml有2种规范,一种DTD,一种是Schema

    DTD:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">  //把DTD规范放到同一个包下,然后把这句话放到自己的xml文件里,标签必须是成对的
     3 <web-app>
     4     <servlet>
     5         <servlet-name>MyServer</servlet-name>
     6         <servlet-class>com.oracle.demo03.person</servlet-class>  这里写要操作类的路径
     7     </servlet>    
     8     <servlet-mapping>
     9         <servlet-name>MyServer</servlet-name>
    10         <url-pattern>/hello</url-pattern>
    11     </servlet-mapping> 
    12 </web-app>

    Scheam比DTD更强大,文件的扩展名是xsd,支持命名空间

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns="http://www.example.org/web-app_2_5" 
     3             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4             xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
     5             version="2.5">
     6     <servlet>
     7         <servlet-name></servlet-name>
     8         <servlet-class></servlet-class>
     9     </servlet>            
    10     <servlet-mapping>
    11         <servlet-name></servlet-name>
    12         <url-pattern></url-pattern>
    13     </servlet-mapping>
    14 </web-app>

    用法和DTD差不多

    XML解析

    1.通过解析器把xml文件装到内存里,成为ocmenent对象来获取元素,优点是元素元素之间有关系,可以增删改查,缺点如果xml文件过大,可能是会内存溢出

    2.SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件 驱动的方式进行具体解析,每执行一行,都将触发对应的事件。

    3.PULL:  Android内置的XML解析方式

    常见的解析开发包:

    n JAXP: sun公司提供支持DOMSAX开发包

    n JDom:dom4j兄弟

    n jsoup:一种处理HTML特定解析开发包

    n dom4j:比较常用的解析开发包,hibernate底层采用。,在这里我们用deom4j

    解析:

    dom4j的常用方法:

    直接来练习题操作吗,定义一个接口,再来个接口的实现类,然后写个xml文件,然后通过xml文件来调用该接口实现类的方法

    1 package com.oracle.demo04;
    2 
    3 public interface Person {     //接口
    4     public void a();
    5     public void b();
    6     public void c();
    7 }
     1 package com.oracle.demo04;
     2 
     3 public class PersonS  implements Person{
     4         //接口实现类
     5     @Override
     6     public void a() {
     7         System.out.println("出生");
     8         
     9     }
    10 
    11     @Override
    12     public void b() {
    13         System.out.println("青年");
    14         
    15     }
    16 
    17     @Override
    18     public void c() {
    19         System.out.println("爱你到老");
    20         
    21     }
    22 }
    23         
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns="http://www.example.org/web-app_2_5" 
     3             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4             xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
     5             version="2.5">
     6     <servlet>
     7         <servlet-name>MyServer</servlet-name>
     8         <servlet-class>com.oracle.demo04.PersonS</servlet-class>  这里写要读取实现类的路径
     9     </servlet>            
    10     <servlet-mapping>
    11         <servlet-name>MyServer</servlet-name>
    12         <url-pattern>/hello</url-pattern>
    13     </servlet-mapping>
    14 </web-app>
     1 package com.oracle.demo04;
     2 
     3 import java.lang.reflect.Method;
     4 
     5 import org.dom4j.Document;
     6 import org.dom4j.DocumentException;
     7 import org.dom4j.Element;
     8 import org.dom4j.io.SAXReader;
     9 
    10 public class Test {
    11 
    12     public static void main(String[] args) throws Exception {
    13         //创建解析器
    14         SAXReader sa = new SAXReader();
    15         //此处写要读取xml文件的路径
    16         Document doc = sa.read("src/com/oracle/demo04/WebDtd.xml");  写要读取的xml文件路径
    17         //获取根元素<web-app>
    18         Element el = doc.getRootElement();
    19         //获取根元素下的指定的子元素
    20         Element em = el.element("servlet");
    21         //获取server下的子元素
    22         String servletclass  = em.elementText("servlet-class");
    23         //获取后再根据获取到的xml元素来获取字节码对象
    24         Class c = Class.forName(servletclass);
    25         //创建一个对象,然后通过字节码对象来过去该类的方法
    26         Object obj = c.newInstance();
    27         Method a = c.getMethod("a");
    28         Method b = c.getMethod("b");
    29         Method c1 = c.getMethod("c");
    30         //调用方法
    31         a.invoke(obj);
    32         b.invoke(obj);
    33         c1.invoke(obj); 
    34         要注意,xml的路径一定要写对,创建doc对象读取的路径也要写对
    35         
    36         
    37         
    38         
    39                 
    40     }
    41 
    42 }

    控制台:

  • 相关阅读:
    使用脚本进入一个命令行控制台,并预设执行的命令列表
    cifs挂载远程文件出现 No such device or address错误
    longtable 跨越多个页面时,如何在跨页时自动断行并加上横线及去掉页眉
    matplotlib中文显示-微软雅黑
    latex编译过程-关于嵌入所有字体
    python做图笔记
    linux启动全过程
    连接并同步windows下的git仓库
    反向ssh
    Ubuntu更改启动内存
  • 原文地址:https://www.cnblogs.com/wangrongchen/p/9251503.html
Copyright © 2020-2023  润新知