Java之XML操作:从XML中直接获取数据
<dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>
package testTraffic.utils; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * XmlUtils class * * @author gongxingrui * @date 2018-12-07 **/ public class XmlUtils { public static Document readXml(String filePath) throws DocumentException { return readXml(new File(filePath)); } public static Document readXml(File file) throws DocumentException { SAXReader reader = new SAXReader(); return reader.read(file); } public static Document readXml(InputStream inputStream) throws DocumentException { SAXReader reader = new SAXReader(); return reader.read(inputStream); } public static Document readXmlFromResources(String resource) throws DocumentException, IOException, URISyntaxException { SAXReader reader = new SAXReader(); return reader.read(ResourcesUtils.getResourceAsFile(resource)); } public static String getAttribute(Element element, String attrName) { return element.attributeValue(attrName); } public static String getText(Element element) { return element.getText(); } public static List<Element> getElements(Element element, String tagName) { return element.elements(tagName); } /** * 根据节点名称获取子节点数据 */ public static String getElementText(String resource, String qName) throws Exception { Element root = readXmlFromResources(resource).getRootElement(); String text = root.elementText(qName); return text.trim(); } /** * 根据节点名称获取子节点的子节点数据 */ public static String getElementText(String resource, String qName, String SubQName) throws Exception { Element root = readXmlFromResources(resource).getRootElement(); String text = root.element(qName).elementText(SubQName); return text.trim(); } /** * 根据节点名称获取子节点的子节点的数据列表 */ public static List<String> getElementTextList(String resource, String qName) throws Exception { List<Element> elementList = readXmlFromResources(resource).getRootElement().element(qName).elements(); List<String> list = new ArrayList<>(); for (Element e : elementList) { list.add(e.getTextTrim()); } return list; } }
@Test public void testXML6() throws Exception { String path2 = "shelby/data/sql/demo/sql2.xml"; String s = XmlUtils.getElementText(path2, "insert_1"); logger.info(s); List<String> list = XmlUtils.getElementTextList(path2, "del_group"); logger.info(list); String s2 = XmlUtils.getElementText(path2, "del_group_2", "del_2"); logger.info(s2); }
<?xml version="1.0" encoding="UTF-8"?> <mybatisGroup id="预置数据语句"> <del_1 id="del_1" type="delete"> delete from t_admin_user WHERE user_name = 'testuser'; </del_1> <del_2 id="del_2" type="delete"> delete from t_admin_user WHERE user_name = 'testuser2'; </del_2> <insert_1 id="insert_1" type="insert"> insert into `t_admin_user` (`id`, `user_name`, `user_password`, `del_flag`, `create_time`, `update_time`) VALUES( null,'testuser','testuser123','0','2019-01-21 19:43:58','2019-01-22 19:44:03'); </insert_1> <del_group> <statement> delete from t_admin_user WHERE user_name = 'testuser'; </statement> <statement> delete from t_admin_user WHERE user_name = 'testuser2'; </statement> </del_group> <del_group_2> <del_1> delete from t_admin_user WHERE user_name = 'testuser'; </del_1> <del_2> delete from t_admin_user WHERE user_name = 'testuser2'; </del_2> <del_3> delete from t_admin_user WHERE user_name = 'testuser3'; </del_3> </del_group_2> </mybatisGroup>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构