XML+propties

news/2025/1/20 0:37:17/文章来源:https://www.cnblogs.com/xwdzj/p/18680587

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约束文档


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/871940.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一条SQL更新语句是如何执行的?

与查询流程不同的是,更新流程中会涉及两个重要的模块: (i)redo_log模块(InnoDB中的日志模块):在 MySQL 里也有这么个问题,如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高。为了解决这个问题,MyS…

大模型分布式训练并行技术(五)-序列并行

p { font-size: 12pt; line-height: 2 !important } 参考资料 大模型分布式训练并行技术(五)-序列并行 详解MegatronLM序列模型并行训练(Sequence Parallel)一、序列并行(Colossal-AI)背景 Colossal-AI 序列并行诞生的背景是 self-attention 的内存需求是输入长度(sequenc…

1.匿名内部类

使用场景不用多创建类,来使用其方法定义 匿名内部类的语法比较奇特,匿名内部类既是一个类的定义,同时他本身也是一个对象, 所以子类继承抽象类, 实现类实现接口,需要节省内存不创建类,从而创建匿名内部类 例子使用当你的才华配不上你的野心,努力的时候到了!

Arrays 排序

正常来说 Arrays可以用于数组排序, 但如果数组里面是引用类型地址就会报错,这时候, 就需要加个功能(实现接口/继承接口) Comparable接口来定引用类型对象的排序规则(以..属性值进行排序)正常Arrays.sort( 数组对象)进行排序时 , 会在排序的时候将数组对象进行调用comparato方…

Spring Boot 自动配置原理详解

引言 Spring Boot 的一大亮点是它能够自动配置(Auto-Configuration)Spring应用程序,极大地简化了Spring应用的创建过程。开发者只需添加所需的依赖,Spring Boot就会根据这些依赖和一些预设条件自动装配相应的组件,从而减少了大量样板代码的编写。 第三方组件的集成方式 对…

传奇

毋庸置疑,很多人的心里,都有一个传奇、传奇3,80后、90后,甚至70后尤甚。当然也包括我。主要当然因我曾经是盛大游戏传奇工作室研发团队的一员,且是盛大传奇3项目部的第一个程序技术人员,内心对传奇、传奇3的感情非同一般。因工作等原因,我早已不再从事传奇类游戏的开发研…

常用工具

类似gdb的bash调试工具bashdb: https://sourceforge.net/projects/bashdb/files/bashdb/ 非常好用,结合vscode bashdb(bash debug) shift + command + d,配置 .vscode/launch.json

《CPython Internals》阅读笔记:p232-p249

《CPython Internals》学习第 13天,p232-p249 总结,总计 18 页。 一、技术总结 无。 二、英语总结(生词:1) 1.overhead (1)overhead: over-("above") + head(“top part, uppermost section”) overhead的字面意思是:above the head,后来演变成"represent …

2025春秋杯冬季赛MISC部分题目复现

简单算术 异或直接得出flagfind_me 进游戏用fill指令把命令方块填充掉然后切创造或者观察找将文件解压出来后看结构是MC的存档文件,于是用MC跑,提示要找雪屋,在附近雪屋的箱子里有给压缩包密码 解压后得到:unai?535.0a20[189.[4049[ax30[e.j60xaj91x8+随波逐流一把梭音频的秘密…

CogAgent: A Visual Language Model for GUI Agents

CogAgent: 利用VLM操作GUI。主要内容 提出了一个18B的VLM模型CogAgent(CogVLM的新版本),旨在提高对于GUI的理解、导航和交互能力。利用高分辨率和低分辨率编码器适应不同分辨率的输入,在9个VQA benchmarks上取得了sota。同时,CogAgent利用截屏输入,在PC和安卓GUI导航任务…

【原创】MAC OS 本地搭建部署 dify

一、什么是 dify?Dify 是一个开源的大语言模型(LLM)应用开发平台,融合了后端即服务(Backend as Service, BaaS)和 LLMOps 理念,旨在简化和加速生成式AI应用的创建和部署。它支持多种大型语言模型(如OpenAI的GPT系列、Claude3等),并提供强大的数据集管理功能、可视化的…

apollo收紧权限

apollo收紧权限 1 系统权限管理 限制只有超级管理员可以创建项目。 1.1 系统权限管理参数 apollo 用户默认是系统的超级管理员,拥有管理所有项目和项目下所有命名空间的权限。 apollo 用户登录系统,点击右上角的管理员工具.系统权限管理。(1) 为用户添加创建应用权限(系统参数…