XML+propties

txt文件,properties(属性)文件,XMl文件

txt与properties与XML的区别

当这些文件存储单个关系数据时, 普通文件 无法存储 关系数据,而properties属性文件以键值对形式存储就很方便,XML文件也可以 见图1
但储存多个用户就不行了,XML更适合, 见图2


properties集合

properties 代表属性文件这一类型
load:加载,story储存

properties读属性文件

//掌握properties的基本用法  

@org.junit.Test  
public void test() throws IOException {  
    //    1.创建一个properties对象  
    Properties properties = new Properties();  
    System.out.println(properties);  
  
    //    2.加载属性文件数据到properties对象里  
    properties.load(new FileReader(new File("E:\\JavaSE_Code_64\\day11\\users.properties")));  
    //    3. 查看properties全部数据  
    System.out.println(properties);  
//    4.根据键找值 ,查找张无忌的密码  
    System.out.println(properties.getProperty("张无忌"));  
//    5. 获取所有的键集合  
    Set<String> names = properties.stringPropertyNames();  
    System.out.println(names);  
  
    System.out.println("---------------------------");  
  
//    6. 查看所有的数据  
    for (String name : names) {  
        String pw = properties.getProperty(name);  
        System.out.println(name+":"+pw);  
    }  
  
    System.out.println("---------------------------");  
  
//   使用 forEach   properties.forEach((k,v)-> { System.out.println(k+"-->"+v);});  
}

properties写属性文件

注意连通输出流到属性文件,第二个参数是注释信息

@org.junit.Test  
public void test2() throws IOException {  
//     1, 创建一个properties对象,用于读写属性文件  
    Properties properties = new Properties();  
    //2. 存一个键值对数据  
    properties.setProperty("张三","zhangs123");  
//    3.把 properties对象的键值对数据输出到属性文件去  
    properties.store(new FileWriter("E:\\JavaSE_Code_64\\day11\\users2.properties"),"user&password");  
  
}

XML文件

概述

XML:可扩展标记语言
本质是是一种数据的格式,可以用来存储复杂的数据结构,和数据关系
应用场景: 经常用来作为系统的配置文件;或者作为一种特殊的数据结构,在网络中进行传输

特点

  1. XML的标签一般是成对出现的
  2. XML只有一个根标签
  3. XML可以有属性值比如id,name等
  4. XML的标签可以自定义
  5. 如果一个文件中放的是XML数据,那么这个文件就是XML文件,后缀一般写.xml

idea创建xml文件

file文件,后缀xml就行

xml语法规则

可以渲染到浏览器

<?xml version="1.0" encoding="UTF-8" ?>  
<!--XML文件的台头声明 ,版本级别,及编码格式 ,注意该声明必须在第一行,哪怕第一行是注释也不行-->  
<!--根标签只有一个-->  
<users>  
    <user id="1">  
        <name>张无忌</name>  
        <password>zhangwj123 </password>  
        <data>            <!-- 3<5 && 8>6 -->  
            3&lt;5&amp;&amp;8&gt;6  
            <!-- 还可以这样写-->  
            <![CDATA[  
               3<5 && 8>6  
            ]]>  
        </data>  
    </user>  
  
    <user id="2">  
        <name>赵敏</name>  
        <password>zhaom123</password>  
    </user>  
  
    <user id="3">  
        <name>金毛狮王</name>  
        <password>jingmsw123</password>  
    </user>  
</users>

应用场景

Xml作为网络通信

Dom4j

使用

一般用Dom4j工具解析xml文件

Dom4j有个工具SAXReader, 该类的对象可以将解析的xml文档一下子读取到内存中去,把xml文件包装成一个Document对象 ,就可以使用Document对象获取里面的数据了

Dom4j方法


Element 方法

注意 拿数据,只能一层一层的拿,自上而下

<?xml version="1.0" encoding="UTF-8" ?>  
<!--XML文件的台头声明 ,版本级别,及编码格式 ,注意该声明必须在第一行,哪怕第一行是注释也不行-->  
<!--根标签只有一个-->  
<users>  
    <user id="1">  
        <name>张无忌</name>  
        <password>zhangwj123 </password>  
        <data>            <!-- 3<5 && 8>6 -->  
            3&lt;5&amp;&amp;8&gt;6  
            <!-- 还可以这样写-->  
            <![CDATA[  
               3<5 && 8>6  
            ]]>  
        </data>  
    </user>  
  
    <user id="2">  
        <name>赵敏</name>  
        <password>zhaom123</password>  
    </user>  
  
    <user id="3">  
        <name>金毛狮王</name>  
        <password>jingmsw123</password>  
    </user>  
  
    <peoper>幸福安康</peoper>  
</users>

获取所有的一级标签和二级标签

//获得一级二级所有的标签  
@Test  
public void test2() throws DocumentException {  
    //1. 使用SAXReader工具解析xml文件到内存中去  
    SAXReader saxReader = new SAXReader();  
    //2. 将xml文件包装成一个document对象  
    Document document = saxReader.read("E:\\JavaSE_Code_64\\day11\\user.xml");  
    //3. 获取根标签  
    Element rootElement = document.getRootElement();  
    //4. 获取根标签下一级所有标签  
    List<Element> elements = rootElement.elements();  
    for (Element firstElement : elements) {  
        System.out.println(firstElement.getName());  
        //5. 获得二级所有标签  
        for (Element secondElement : firstElement.elements()) {  
            System.out.println("  " + secondElement.getName());  
        }  
    }  
}
  1. 获取指定索引的标签,
  2. 通过id名,获取其属性/属性值
  3. 获取标签的文本
//获取指定根元素下的指定二级目录的值  
@Test  
public void test3() throws DocumentException {  
    //1. 解析xml文件成一个document对象  
    //1.1 创建解析器对象  
    SAXReader saxReader = new SAXReader();  
    //1.2 使用解析器将xml读到内存,并包装成一个document对象  
    Document document = saxReader.read("E:\\JavaSE_Code_64\\day11\\user.xml");  
    //2.获取根元素  
    Element rootElement = document.getRootElement();  
    System.out.println(rootElement.getName()); //users  
    //3.定位到根下一级标签的赵敏的user属性  
    Element firstElement = rootElement.elements().get(1); //user  
  
    //4. 直接获得其name和pw属性值  
    System.out.println(firstElement.elementText("name"));//赵敏  
    System.out.println(firstElement.elementText("password"));//zhaom123  
    //5. 获取其user的id值  
    System.out.println(firstElement.attributeValue("id"));//2  
  
    for (Element element : firstElement.elements()) {  
        System.out.println(element.getText()); //赵敏 zhaom123    }  
}

根据某标签获取其指定子标签,及文本内容

//    快速获取标签文本  
@Test  
public void test4() throws DocumentException {  
    //1. 解析xml文件成一个document对象  
    //1.1 创建解析器对象  
    SAXReader saxReader = new SAXReader();  
    //1.2 使用解析器将xml读到内存,并包装成一个document对象  
    Document document = saxReader.read("E:\\JavaSE_Code_64\\day11\\user.xml");  
    //2.获取根元素  
    Element rootElement = document.getRootElement();  
    //3. 获取指定标签  
    Element peoper = rootElement.element("peoper");  
    //4.获得指定标签的文本  
    System.out.println(peoper.getText()); //幸福安康  
  
}

获取其标签文本内容

//获取元素的属性信息  
@Test  
public void test5() throws DocumentException {  
    //1. 解析xml文件成一个document对象  
    //1.1 创建解析器对象  
    SAXReader saxReader = new SAXReader();  
    //1.2 使用解析器将xml读到内存,并包装成一个document对象  
    Document document = saxReader.read("E:\\JavaSE_Code_64\\day11\\user.xml");  
    //2.获取根元素  
    Element rootElement = document.getRootElement();  
    //获取第三组user标签  
    Element element = rootElement.elements().get(2);  
    //获取第三组user标签下的id属性  
    Attribute id = element.attribute("id");  
    //获取id的名称  
    System.out.println(id.getName());//id  
    //获取其id属性的值  
    System.out.println(id.getText());//3  
    System.out.println(id.getValue());//3  
}

获取某标签下通过属性名查找其子标签的文本内容

//获取某元素下子元素的文本内容 ,即取出去掉前后空格  
@Test  
public void test6() throws DocumentException {  
    //1. 解析xml文件成一个document对象  
    //1.1 创建解析器对象  
    SAXReader saxReader = new SAXReader();  
    //1.2 使用解析器将xml读到内存,并包装成一个document对象  
    Document document = saxReader.read("E:\\JavaSE_Code_64\\day11\\user.xml");  
    //2.获取根元素  
    Element rootElement = document.getRootElement();  
    //获取第二个user标签  
    Element element = rootElement.elements().get(0);  
    //获取第二个user标签下name的值  
    System.out.println(element.elementText("name")); //张无忌  
    //获取第二个user标签下的值value  
    System.out.println(element.elementText("password"));//zhangwj123  
  
// 取出元素文本内容,去除前后空格  
    System.out.println(element.elementTextTrim("data")); //3<5&&8>6 3<5 && 8>6  
}

XMl文件的创建

使用Stringbuilder拼接一个xml文件,先拼接内容,再使用缓冲输出流写到指定的xml文件

//使用Stringbuilder拼接一个xml文件,先拼接内容,再使用缓冲输出流写到指定的xml文件  
@Test  
public void test1() {  
  
    StringBuilder sb = new StringBuilder();  
    sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");  
    sb.append("<users>\n");  
    sb.append("     <user>").append(" id=").append("\"1\"").append(">\n");  
    sb.append("         <name>").append("张无忌").append("</name>\n");  
    sb.append("         <password>").append("zhangwj123").append("</password>\n");  
    sb.append("     </user>\n");  
  
    sb.append("     <user>").append(" id=").append("\"2\"").append(">\n");  
    sb.append("         <name>").append("赵敏").append("</name>\n");  
    sb.append("         <password>").append("zhaom123").append("</password>\n");  
    sb.append("     </user>\n");  
  
    sb.append("     <user>").append(" id=").append("\"3\"").append(">\n");  
    sb.append("         <name>").append("金毛狮王").append("</name>\n");  
    sb.append("         <password>").append("jingmsw123").append("</password>\n");  
    sb.append("     </user>\n");  
  
  
    sb.append("</users>\n");  
  
  
  
    //定义写在try()里面就不用关流了  
    try (  
            BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\JavaSE_Code_64\\day11\\createXml.xml"));  
    ) {  
        //写入拼接后的xml内容到xml文件  
        bw.write(sb.toString());  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
  
}
<?xml version="1.0" encoding="UTF-8" ?>  
<users>  
     <user> id="1">  
         <name>张无忌</name>  
         <password>zhangwj123</password>  
     </user>  
     <user> id="2">  
         <name>赵敏</name>  
         <password>zhaom123</password>  
     </user>  
     <user> id="3">  
         <name>金毛狮王</name>  
         <password>jingmsw123</password>  
     </use

XMl约束文档

专门用来限制xml书写格式的文档,比如:限制标签,属性应该怎么写

约束文档的分类

  • DTD文档
  • Schema文档

DTD文档

例子

将约束文档导入xml文件
  1. 第一行限制根标签必须是书架,子元素必须是一个+个书标
  2. 书标签里面有书名,作者,售价这些标签
  3. 书名,作者,售价这些标签可以写内容

schema约束文档


posted @ 2025-01-20 00:36  加油酱  阅读(6)  评论(0)    收藏  举报