使用 dom4j 进行解析
1.添加dom4j的依赖
2.使用 File 加载到本地文件后,交给SAXReader解析,它解析完成后将xml文件中的标签包装成一个Document对象返回,需要操作的元素,都在这个Document对象中。
//灵活更换为需要的路径
String filePath = "C:\\Users\\CHY\\Desktop\\restUrl.xml";
//读取xml配置文件
File file = new File(filePath);
//交给SAXRead去解析
Document document = new SAXReader().read(file);
3.根据需要去获取标签值或者属性值,进行自己的逻辑处理。
4.简单演示
A、引入依赖
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
B、现有XML文件如下
<services>
<service isUsable="true">
<restUrl>/register/user-info/create</restUrl>
<serviceID>USER_RegisterUserInfo_A</serviceID>
</service>
<service isUsable="true">
<restUrl>/update/user-info/update</restUrl>
<serviceID>USER_UpdateUserInfo_U</serviceID>
</service>
<service isUsable="false">
<restUrl>/delete/user-info/delete</restUrl>
<serviceID>USER_DeleteUserInfo_D</serviceID>
</service>
</services>
C、代码部分
public static void main(String[] args) throws DocumentException {
String filePath = "C:\\Users\\CHY\\Desktop\\restUrl.xml";
File file = new File(filePath);
Document document = new SAXReader().read(file);
Element root = document.getRootElement();
//根元素下的所有
List<Element> elements = root.elements();
for (Element service : elements) {
List<Element> delegateElement = service.elements();
for (Element e : delegateElement) {
//变迁名称的匹配,并获取其值
if ("restUrl".equals(e.getName())) {
System.out.println("restUrl====" + e.getStringValue());
}
if ("serviceID".equals(e.getName())) {
System.out.println("serviceID====" + e.getStringValue());
}
}
}
}
D、运行截图
xml读取
E、代码中有一个service标签的isUsable标签为false,只要在循环上加上对属性的判断就好了,上代码。
//根元素下的所有
List<Element> elements = root.elements();
//获取到services节点下的service节点的List
List<Element> list = root.elements("service");
System.out.println(list.size());
for (Element service: elements){
//当前service有效时才回去解析
if ("true".equals(service.attributeValue("isUsable"))){
List<Element> delegateElement = service.elements();
for (Element e:delegateElement) {
//变迁名称的匹配,并获取其值
if ("restUrl".equals(e.getName())){
System.out.println("restUrl===="+e.getStringValue());
}
if ("serviceID".equals(e.getName())){
System.out.println("serviceID===="+e.getStringValue());
}
}
}
}
截图,看结果,总共有三个标签,但只有两个有效
有效标签的解析
如果在标签里,涉及到多个属性的,其实可以考虑将service标签里的内容封装到Service的对象中去,进而添加到List或是Map中去,用的时候直接去取出就行。
网友评论