Java 解析自定义XML文件
这里我用 maven项目 作为 演示
配置pom.xml文件
完整的pom.xml文件信息
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.oukele.Readerxml</groupId>
<artifactId>ReaderXml</artifactId>
<version>1.0-SNAPSHOT</version> <name>ReaderXml</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!--添加依赖-->
<dependencies> <!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency> <!-- dom4j 依赖-->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.1</version>
</dependency> </dependencies> <build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build> </project>
项目结构
Cat类(Dog类 类似)截图:
接口IBeans
在main文件夹下面新建一个resources文件夹
在resources文件夹中新建一个xml(文件名字自定义)文件
比如:
test_xml.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!--自定义 父节点-->
<beans> <!--自定义 子节点-->
<beans id="cat" class="com.oukele.Readerxml.animal.Cat" ></beans> <beans id="dog" class="com.oukele.Readerxml.animal.Dog" ></beans> </beans>
Beans类代码:
package com.oukele.Readerxml.ioc; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class Beans implements IBeans{ private static Map<String,Object> banes = new HashMap<>(); public Beans(String configxml) throws Exception {
//创建SAXReader对象
SAXReader reader = new SAXReader();
//xml文件的位置
URL sources = Beans.class.getClassLoader().getResource(configxml);
//创建document对象,并读取xml文件 (解析xml文件)
Document document = reader.read(sources);
//读取元素 getRootElement() --》 获取父节点 elements() --> 所有节点
List<Element> elements = document.getRootElement().elements(); for (Element element : elements) {
// <beans id="cat" class="com.oukele.Readerxml.animal.Cat" ></beans>
// id 是一个属性 可以自定义
String id = element.attributeValue("id");//获取id属性
String clazz = element.attributeValue("class");//获取class属性
// id (钥匙) 对应 一个 实例
banes.put(id,Class.forName(clazz).newInstance());
} } @Override
public Object getBean(String name) {
//根据名字来获取实例
return banes.get(name);
}
}
去test文件中的AppTest类中测试一下
package com.oukele.Readerxml; import com.oukele.Readerxml.animal.Cat;
import com.oukele.Readerxml.animal.Dog;
import com.oukele.Readerxml.ioc.Beans;
import org.junit.Test; public class AppTest
{
@Test
public void Test1(){
try { Beans beans = new Beans("test_xml.xml"); Cat cat = (Cat) beans.getBean("cat");
cat.say(); System.out.println("----------------------------------"); Dog dog = (Dog) beans.getBean("dog");
dog.say(); } catch (Exception e) {
e.printStackTrace();
}
}
}
结果:
Java 解析自定义XML文件的更多相关文章
- 分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要)
原文:分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要) XML文件 <?xml version="1.0"?> <student ...
- Java眼中的XML文件写入
创建DOM方式生成XML文档 DOMTest package com.imooc.domtest.test; import java.io.File; import java.io.IOExcepti ...
- 深入刨析tomcat 之---第11篇 how tomcat works( 第15章 ) 如何解析web.xml 文件
writedby 张艳涛 记得当年是学习jsp的时候,写过web.xml中的标签.在之后的springmvc中也是有关于配置mvc 过滤器 和dispatchServlet的标签,之前是看不懂呢!看到 ...
- JAXB—Java类与XML文件之间转换
JAXB-Java类与XML文件之间转换 简介 JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生 ...
- Java JSON、XML文件/字符串与Bean对象互转解析
前言 在做web或者其他项目中,JSON与XML格式的数据是大家经常会碰见的2种.在与各种平台做数据对接的时候,JSON与XML格式也是基本的数据传递格式,本文主要简单的介绍JSON/XML ...
- 摘抄的 JAVA JDOM 操作XML文件
JDOM修炼篇 用过XERCES的程序员都会感到,有时候用一句话就可以说清楚的事,当用XERCES的API来实现时,要三四行程序. 回页首 获得并安装JDOM 在 http://www.jdom. ...
- 【反射】利用java反射原理将xml文件中的字段封装成对应的Bean
本例使用的xml解析方式为jdom ... <ROOT> <Consignment> ... </Consignment> </ROOT> 解析xml文 ...
- Java笔记_web.xml文件
在JavaEE工程中,web.xml文件是用来初始化配置信息:比如Welcome页面.servlet.servlet-mapping.filter.listener.启动加载级别等,但并不是必须的,一 ...
- 利用SAX解析读取XML文件
xml 这是我的第一个BLOG,今天在看<J2EE应用开发详解>一书,书中讲到XML编程,于是就按照书中的步骤自己测试了起来,可是怎么测试都不成功,后来自己查看了一遍源码,发现在读 ...
随机推荐
- 【转帖】linux sort,uniq,cut,wc,tr,xargs命令详解
linux sort,uniq,cut,wc,tr,xargs命令详解 http://embeddedlinux.org.cn/emb-linux/entry-level/201607/21-5550 ...
- [转帖]服务器备份工具:Amanda,Bakula,Clonezilla,Rsnapshot,Mondo Rescue
服务器备份工具:Amanda,Bakula,Clonezilla,Rsnapshot,Mondo Rescue https://ywnz.com/linuxyffq/5270.html 改天试用一下. ...
- Hadoop集群搭建-02安装配置Zookeeper
Hadoop集群搭建-05安装配置YARN Hadoop集群搭建-04安装配置HDFS Hadoop集群搭建-03编译安装hadoop Hadoop集群搭建-02安装配置Zookeeper Hado ...
- webservice的hello world
整个项目的目录结构是 Mycontroller.java:可以在localhost:8080/hello中查看 //Mycontroller.java package com.chenyun.cont ...
- redis哨兵sentinel.conf文件
关闭保护模式 //17行 protected-mode no 端口号 //21 port 26379 后台启动 //26 daemonize yes //84行 主机的ip加端口号 2 为票数 sen ...
- Python库的优雅安装及PyCharm虚拟环境配置
一.安装python库 安装python库有几种方式: 1. 使用pip命令行,如:pip install Pillow 2. 在pycharm中安装 3. 使用Anaconda批量安装常用模块 在使 ...
- APOC官网触发器示例执行后Web页面一直转圈
apoc使用触发器:如apoc官网指导 CREATE (d:Person {name:'Daniel'}) CREATE (l:Person {name:'Mary'}) CREATE (t:Pers ...
- poj 3320 复习一下尺取法
尺取法(two point)的思想不难,简单来说就是以下三步: 1.对r point在满足题意的情况下不断向右延伸 2.对l point前移一步 3. 回到1 two point 对连续区间的问题求 ...
- JS基础_质数练习,用到了标记flag
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- postman传数组参数,二维数组,多维数组
一维数组: 传递: 接收: 二维数组: 传递: 接收: 依此类推,