关于xml解析的知识点
文章目录
- properties文件读取
- xml文件读取
- 一个方法解析xml里所有文件节点内容
常见的两种资源文件是后缀为:properties和xml的
而静态资源文件就是,不同用户访问到的都是同一份内容,例如:css、js、html、图片、视屏等
properties文件读取
properties文件的解析方式有java.util.properties这个类来完成
根据存放位置
1、根目录下Xxx.class.getResourceAsStream("/config.properties");2、与读取配置文件的类在同一包Xxx.class.getResourceAsStream("config2.properties");3、WEB-INF(或其子目录下)ServletContext application = this.getServletContext();InputStream is = application.getResourceAsStream("/WEB-INF/config3.properties");为什么放在WEB-INF的文件必须要全局上下文才能取到呢?原因:WEB-INF是一个安全目录,也就是不能被外界访问的一个目录,只能通过内部配置web.xml通过servlet来访问
当我的文件在我的根目录下(Source Folder)
public static void main(String[] args) throws IOException {//将当前同包下的db.properties资源文件转换成输入流
// 斜杆/ 代表根目录InputStream in = PropertiesDemo.class.getResourceAsStream("/db.properties");Properties p=new Properties();p.load(in);System.out.println(p.getProperty("uname"));System.out.println(p.getProperty("upass"));}
结果获取到了我db.properties文件的两个值
如果把文件放入WEB-INF中,有没有用上下文来获取时,就会报空指针异常
所以正确的获取方式是,写一个servlet,通过application来获取值,不同的是还有配置web.xml,同web来把文件的值打印到控制台
public class proServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext context = req.getServletContext(); //声明一个全局上下文InputStream in = context.getResourceAsStream("/WEB-INF/db.properties");//获取到WEB_INF的文件Properties p=new Properties();p.load(in);System.out.println(p.getProperty("uname"));//打印到控制台System.out.println(p.getProperty("upass"));}
}
xml文件读取
根据文件存在的位置来取,是跟properties文件是一样的
xml文件:应该有一个工具类来完成
jdk/jdom
sax解析 由上往下解析 (移动端用的比较多)
dom4j解析 由外到内解析(目前最火的解析方式)
首先这是我的xml文件
我要通过dom4j+xpath解析xml文件,首先我们需要导入两个jar包dem4和jaxen(没有的可以去网上下载)
现在我们要获取到sid=s003的name值
public static void main(String[] args) throws DocumentException {InputStream in = XmlParseDemo.class.getResourceAsStream("students.xml");SAXReader reader = new SAXReader();Document doc = reader.read(in);
// System.out.println(doc.asXML());//输出整个xml文件的值
// 1、获取到所有的学生List<Element> stules = doc.selectNodes("/students/student");//查student这一组节点
// 2、遍历for (Element stu : stules) {if("s003".equals(stu.attributeValue("sid"))) {Node nameEle = stu.selectSingleNode("name");//查name单个节点
// System.out.println(nameEle.asXML());//打印<name>小王</name>System.out.println(nameEle.getText());//打印小王,这是第一种方法,通过遍历判断}}
// 做判断、如果sid=s003那么拿到小王Node stuEleS003 = doc.selectSingleNode("/students/student[@sid='s003']");System.out.println(stuEleS003.selectSingleNode("name").getText());}
两种方法都放出来了,所以应该打印了两个小王
一个方法解析xml里所有文件节点内容
xml可以作为文件传输,每一个接口传输的xml节点及节点内容都不相同,怎么用一个xml解析方法解析多种格式的文件
思路:利用递归,从指定节点Element node开始,递归遍历其所有子节点,判断是否还存在子节点,直到没有子节点为止
案例:xml文件还是上面那个student.xml
public static void main(final String[] args) throws Exception {Demo test = new Demo();test.testGetRoot();}/*** 获取文件的xml对象,然后获取对应的根节点root*/public void testGetRoot() throws Exception {SAXReader sax = new SAXReader();// 创建一个SAXReader对象File xmlFile = new File("E:\\Desktop\\课件\\2、xml解析\\资料\\students.xml");// 根据指定的路径创建file对象Document document = sax.read(xmlFile);// 获取document对象,如果文档无节点,则会抛出Exception提前结束Element root = document.getRootElement();// 获取根节点getNodes(root);// 从根节点开始遍历所有节点}/*** 从指定节点Element node开始,递归遍历其所有子节点*/public void getNodes(final Element node) {// 当前节点的名称、文本内容和属性System.out.println( node.getTextTrim());// 当前节点内容List<Attribute> listAttr = node.attributes();// 当前节点的所有属性for ( Attribute attr : listAttr) {// 遍历当前节点的所有属性String name = attr.getName();// 属性名称String value = attr.getValue();// 属性的值System.out.println("属性名称:" + name + "---->属性值:" + value);}// 递归遍历当前节点所有的子节点List<Element> listElement = node.elements();// 所有一级子节点的listfor ( Element e : listElement) {// 遍历所有一级子节点getNodes(e);// 递归}}
最后结果为:那student.xml的所有节点内容全部打印
关于xml解析的知识点相关推荐
- dom4j 解析xml文件(涉及知识点:dom4j,XPath,递归)
涉及知识点 :dom4j, XPath, 递归 知识点: 节点是比元素更大一层的概念, 元素节点仅仅是节点中的一种. 元素,属性,名字空间,注释,文本内容,处理指令,还有整个文档(即看成根节点),这7 ...
- XML——XML解析之DOM
1.XML编程 XML编程,就是对XML文件进行crud操作. 那么为什么要用java或者C/C++对XML进行crud操作呢? 1.XML作为数据传递需要解析 2.XML作为配置文件需要读取 3.X ...
- 传智播客 java ppt_传智播客XML解析ppt课件
PPT内容 这是传智播客XML解析ppt课件下载,主要介绍了java解析xml四种方式:Java技术 + XML:基于树的处理:DOM 的问题:SAX的行为:SAX代码例子:SAX的优势:DOM4J, ...
- DOM4J——强大而易用的XML解析器,我们不只是有数据库
DOM4J--强大而易用的XML解析器 DOM4J 一.DOM4J的导入使用 二.认识一些关键角色 三.快速开始 3.1创建一个XML 3.2读取XML节点(历遍和指定) 3.3规范输出 结尾 欢迎关 ...
- XML 解析技术:DOM4j
前言: 我一直以来就坚信一句话:不积跬步无以至千里,不积小流无以成江海.可能很多人对一些基础概念会选择性忽略,但往往基础和知识理解深度决定你的上限. 今天给大家带来一个对框架以及容器源码理解提升的知识 ...
- c语言解析xml字符串_Python XML解析
Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...
- XML解析简介及Xerces-C++简单使用举例
XML是由World WideWeb联盟(W3C)定义的元语言.它已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.XML在不同的语言里解析方式 ...
- Java XML解析工具 dom4j介绍及使用实例
Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...
- C++ XML解析之TinyXML篇[转]
最 近使用TinyXML进行C++ XML解析,感觉使用起来比较简单,很容易上手,本文给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完 成.以后的文章里会讲 ...
最新文章
- 小机上监控AIX和数据库管理系统的运行情况直到性能优化(SQL语句优化和排除硬件问题)...
- Android零基础入门第11节:简单几步带你飞,运行Android Studio工程
- “他们”最想要的圣诞礼物是你的...
- 14个jQuery图片放大编辑插件汇总
- JAVA关键字及作用
- 博客美化的源码(标签,小老鼠,时钟,二次元,雪花,QQ聊天等)
- Teams会议聊天中无法添加其他人解决方案
- 《红楼梦》的香气空白
- Titanic 生存预测(上)
- 韩国电影《醉画仙》,画仙的奋斗史。。。???
- 关于Android 在线预览PDF文件
- 【Linux配置五】 Ubuntu18.04+kalibr标定工具箱安装编译
- adobe flash media service5简单使用
- Camera效果测试-色彩准确性及饱和度测试
- 做计算机实验报告的总结,制作网线实验报告与总结
- appium安装及使用
- Cesium基础知识-加载json数据
- 腾讯地图初始化以及解析和逆解析
- cpld与单片机通信教程-并口和spi
- RH850开发板StarterKit示例程序分析--R_ADCA0_Init();ADC初始化