范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

JAVA读取XML文件(水文,Mybatis源码)

  这篇文章主要是为了写Mybatis源码解析配置文件xml所需的背景知识,表达式部分的文档 https://www.w3.org/TR/1999/REC-xpath-19991116/ JAVA  JSR 206: Java API for XML Processing (JAXP) 1.3 https://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/2.0/jaxp/ReleaseNotes.html#migrationFrom13
  先看下这个是xml文件,然后看这个文档如何解析<?xml version="1.0" encoding="UTF-8"?>           insert into users (id, name) values (#{id}, #{name})           insert into users (id, name) values (#{id}, #{name})        
  读文件的demo/**  * Copyright 2009-2022 the original author or authors.  * 

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.ibatis.begincode; import org.apache.ibatis.parsing.XPathParser; import org.junit.jupiter.api.Test; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.EntityResolver; import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class XMLTest { // https://www.w3.org/TR/1999/REC-xpath-19991116/ @Test public void resolveXml() throws ParserConfigurationException, IOException, SAXException, XPathExpressionException { String fileName = "Mapper.xml"; String xmlFilePath = this.getClass().getResource("").getPath() + fileName; DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setValidating(false); DocumentBuilder db = documentBuilderFactory.newDocumentBuilder(); Document doc = db.parse(new FileInputStream(new File(xmlFilePath))); XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); String expression; Node node; NodeList nodeList; // 1. 根目录 expression = "/*"; node = (Node) xpath.evaluate(expression, doc, XPathConstants.NODE); System.out.println("1. " + node.getNodeName()); // 2.根据标签名获取根目录 expression = "/mapper"; node = (Node) xpath.evaluate(expression, doc, XPathConstants.NODE); System.out.println("2. " + node.getNodeName()); // 3. 根据标签层级获取节点 expression = "/mapper/select"; node = (Node) xpath.evaluate(expression, doc, XPathConstants.NODE); System.out.println("3. " + node.getNodeName()); // 4. 获取标签下所有节点 expression = "/mapper/*"; nodeList = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET); System.out.print("4. "); for (int i = 0; i < nodeList.getLength(); i++) { System.out.print(nodeList.item(i).getNodeName() + " "); } System.out.println(); // 5. 获取所有指定节点 expression = "//insert"; nodeList = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET); System.out.print("5. "); for (int i = 0; i < nodeList.getLength(); i++) { System.out.print(nodeList.item(i).getNodeName() + " "); } System.out.println(); // 6. 获取所有非指定名字节点 expression = "//*[name() != "insert"]"; nodeList = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET); System.out.print("6. "); for (int i = 0; i < nodeList.getLength(); i++) { System.out.print(nodeList.item(i).getNodeName() + " "); } System.out.println(); // 7. 获取至少有一个子节点的节点 expression = "//*[*]"; nodeList = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET); System.out.print("7. "); for (int i = 0; i < nodeList.getLength(); i++) { System.out.print(nodeList.item(i).getNodeName() + " "); } System.out.println(); // 8.获取指定层级的节点 expression = "/*/*"; nodeList = (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET); System.out.print("8. "); for (int i = 0; i < nodeList.getLength(); i++) { System.out.print(nodeList.item(i).getNodeName() + " "); System.out.print(nodeList.item(i).getFirstChild().getNodeValue() + " "); } System.out.println(); } }   执行结果   代码执行结果   其他使用方法 ,直接用 Document处理@Test public void documentTest() throws ParserConfigurationException, IOException, SAXException { String fileName = "Mapper.xml"; String xmlFilePath = this.getClass().getResource("").getPath() + fileName; DocumentBuilderFactory docbuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dombuilder = docbuilderFactory.newDocumentBuilder(); InputStream is = new FileInputStream(xmlFilePath); Document doc = dombuilder.parse(is); Element root = doc.getDocumentElement(); System.out.println(root.getChildNodes().item(1).getFirstChild().getNodeValue()); }


当日韩连克欧洲劲旅闪耀世界杯!国足的众神们在想什么?随着日本逆转西班牙,以小组第一的身份奇迹般杀进世界杯16强,东亚的另外一只球队,我们曾经的劲敌苦主韩国队也掀翻了葡萄牙,最终凭借进球数优势,以小组第二闯入淘汰赛。与葡萄牙的生死战,抄书第3天,挣了3毛钱,普通人只要坚持也可以做到大家好,今天抄书第三天,承蒙平台厚爱,今天增加了三位粉丝,哈哈哈,太开心了。今天抄的书是李月亮的好的人生,不慌不忙。其中,写到了很多人现在的生活状态,生活中没有很快乐,也没有不快乐退伍军人在单位旧伤复发,算工伤吗?冯某退伍后成为了一名车间工人。某日,他在准备拾起一件重物时,突然感到肩膀疼痛,使不上劲儿,重物掉在地上。其他同事赶忙将冯某送往医院。经医生检查,冯某是左肩胛骨骨折。医生经询问得知,在实地体验中感受乡村振兴的力量西安高新区李家岩冬日采摘等你来黄灿灿的水果小番茄,娇艳欲滴的红草莓,颠覆你认识的水果彩椒尽管如今已是严寒冬日,但在西安高新区草堂街道的李家岩村,却能让你尽情享受一番采摘的乐趣。近日,记者在草堂街道李家岩村看到,俄媒称赞中国乡村振兴政策先进精准据俄罗斯报网站12月1日报道,2013年至2020年,中国为消除绝对贫困大力投入资金,使现行标准下9899万农村贫困人口全部脱贫,832个贫困县全部摘帽,12。8万个贫困村全部出列中学生优秀作文芳草萋萋萧瑟的秋风吹散了阳光,天地之间一片清凉。天高云淡,望断南飞雁,漫步在秋意弥漫的乡下,我最喜欢的不是零落成泥的叶,也不是孤芳自赏的花,而是那瘦如霜发的秋草。静静俯下身,欣赏草的模样野贵阳青岩古镇,这里出了贵州历史上第一个状元,古镇美食小吃很多云游风物之旅发现宝藏大省贵州我和青岩古镇的缘分,可以用姗姗来迟形容,去了贵阳三次,才下定决心去的青岩古镇。青岩古镇是贵阳唯一一家国家5A级景区,距贵阳市区30公里左右,市区有好几趟新疆四川山西贵州广西5处冰雪自驾地,等有空了咱们约(附路书)摘自汽车自驾游杂志2022年就在刚刚,接了一通朋友邀约一起吃午饭的电话,但稍作犹豫后我推辞了,因为早上有会议和面试,中午还要校对这篇文字,同时也答应了下午两点上直播节目,无论怎么盘父亲离开我的100天致父亲刚打三个字,眼眶就模糊不清了流泪昨天是您的生日今天是您离开我一百天的日子本来天气预报说好的小雨今天却下了一整天的大雨难道上天也读懂了我的心思在我的人生中从未想过也没做好准备,智能家居,引领时代的发展的产物,你家里有吗?随着智能家居生活的发展,指纹APP甚至语音识别都可以轻松开门,还有智能照明智能窗帘智能插头等一系列智能系统,不必为琐事而烦恼。那智能家居只有优点,没有缺点?以下是智能家居的好与坏。孩子玩手游上瘾,学习一塌糊涂!母亲按时端饭孩子卧室,这样好吗自古以来,无论中国还是世界,没有见过一例孩子对父母怒吼动手从而还能成才的人的先例!连自己父母都可以这样,和畜牲有什么区别?他在人类这个社会还能走的动吗?!你别装了别装同情了你太能装
维科技术2022年前三季度盈利1285。87万元同比扭亏中证智能财讯维科技术(600152)10月28日披露2022年第三季度报告。2022年前三季度,公司实现营业总收入18。05亿元,同比增长20。09归母净利润1285。87万元,同次第花开心灵安宁,才有安乐现代人习惯了向外求,多多益善,得到得越多,越找不到心灵的归宿。因为执念,追逐无结果,无意义,似乎永远得不到自己想到的,因为心的迷茫,没有什么是自己真正想要的。内心的空虚和寂寞,如黑万邦德2022年前三季度净利润1。48亿元同比下降2。60中证智能财讯万邦德(002082)10月28日披露2022年第三季度报告。2022年前三季度,公司实现营业总收入11。84亿元,同比下降8。66归母净利润1。48亿元,同比下降2。比依股份2022年前三季度净利润1。31亿元同比增长51。16中证智能财讯比依股份(603215)10月28日披露2022年第三季度报告。2022年前三季度,公司实现营业总收入10。53亿元,同比下降12。68归母净利润1。31亿元,同比增长精工钢构2022年前三季度净利润6。54亿元同比增长16。80中证智能财讯精工钢构(600496)10月28日披露2022年第三季度报告。2022年前三季度,公司实现营业总收入110。59亿元,同比增长6。38归母净利润6。54亿元,同比增长广哈通信2022年前三季度盈利1058。45万元同比扭亏中证智能财讯广哈通信(300711)10月28日披露2022年第三季度报告。2022年前三季度,公司实现营业总收入1。77亿元,同比增长32。68归母净利润1058。45万元,同比乌鲁木齐最大的公园东郊峡谷山涧中的水磨沟公园水磨沟公园由五山一河组成,包括清泉山虹桥山温泉山水塔山雪莲山和水磨河,集冰雪风情与山水秀色于一体,是国家AAAA级旅游景区,总面积达36平方公里,是乌鲁木齐最大的公园。水磨沟内有大行走河南读懂中国赏太行大峡谷秋日专属美景最浪漫的季节莫过于秋天山野层林尽染彷佛一个画中世界太行大峡谷的秋天亦是如此红叶迷人,自成画卷秋日专属美景正徐徐展开时光有序,而人生如风,不知不觉已步入深秋。山中,木叶渐染,草甸金黄南京苏王嘟嘟唇的魅力还有人不知道吗?所谓一唇定江山可不是说着玩的,据说娱乐圈的满分美人都是这种唇形M唇,也就是常见的嘟嘟唇微笑唇。什么是M唇呢?简而言之就是闭上嘴巴后,嘴巴的上唇线和嘴唇中间的线都呈M形状,形成明显的清江是湖北独有的第一大江,它竟然创造了这么多绝世美景上图著名的恩施大峡谷峰林景观。地处湘渝鄂三省交界处的恩施大峡谷全长108千米,面积达300平方千米,被地理专家们赞誉为可与美国科罗拉多大峡谷相媲美。恩施大峡谷集所有的地质类景观天坑无视版本的打野你以为只有赵云,其实他才是峡谷中的不老松在王者荣耀中打野类英雄,在队伍中的地位一直都很高,而且打野也是队伍中的核心位置,一名会玩打野的玩家前期很轻松就可以把队伍中的节奏打起来,并且还可以帮助队友在线上打出优势,虽然打野位