使用dom4j解析xml工具类[通俗易懂]

使用dom4j解析xml工具类[通俗易懂]使用dom4j解析xml首先在项目中加入dom4j的依赖<dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6</version></depende…

大家好,又见面了,我是你们的朋友全栈君。

使用dom4j解析xml

首先在项目中加入dom4j的依赖

<dependency>
       <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6</version>
 </dependency>

附上基于dom4j解析xml的工具

/* * Copyright © 1998 - 2018 Tencent. All Rights Reserved * www.tencent.com * All rights reserved. */
package com.tencent.tusi.iot.utils;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import static com.tencent.tusi.iot.common.PublicConfig.*;
/** * @author shanpeng */
// 解析xml字符串的工具类
public class XMLUtils{ 

/** * 获取xml对象的根节点 * @param document * @return root */
public static Element getRoot(Document document){ 

Element root = null;
root = document.getRootElement();
return root;
}
/** * 获取fieldName的属性值 * @param document * @return fields */
public static List<String> getFields(Document document){ 

List<String> fields = new ArrayList<>();
Element root = getRoot(document);
if (null != root){ 

// 存储遍历节点
for (Iterator i = root.elementIterator(); i.hasNext();) { 

Element el = (Element) i.next();
for (Iterator j = el.elementIterator(FIELD); j.hasNext();){ 

Element e2 = (Element) j.next();
Attribute attribute = e2.attribute(FIELDNAME);
fields.add(attribute.getValue());
}
}
}
return fields;
}
/** * 根获取每行数据形成一个列表 * @param document * @return rows */
public static List<Element> getRows(Document document){ 

List<Element> rows = new ArrayList<>();
Element root = getRoot(document);
List<String> fields = getFields(document);
if (!fields.isEmpty()){ 

for (Iterator i = root.elementIterator(); i.hasNext();) { 

Element el = (Element) i.next();
for (Iterator k = el.elementIterator(ROW);k.hasNext();){ 

// 一行数据
Element e2 = (Element) k.next();
rows.add(e2);
}
}
}
return rows;
}
/** * 根据url获取xml对象 * @param url * @return document */
public static Document getXmlFromUrl(String url) throws DocumentException{ 

Document document=null;
SAXReader saxReader = new SAXReader();
document = saxReader.read(url);
return document;
}
/** * 根据xml字符串获取xml对象 * @param xmlString * @return document */
public static Document getXmlFromString(String xmlString) throws DocumentException { 

Document document = DocumentHelper.parseText(xmlString);
return document;
}
/** * xml一行转对象 * @param document * @param clazz * @param row * @return * row ---> pojo */
public static Object getObject(Document document,Class<?> clazz,Element row) { 

Object obj=null;
try { 

obj=clazz.newInstance();//创建对象
List<String> fields = getFields(document);
// 获取属性名
for(int i=0;i<fields.size();i++){ 

String propertyname = fields.get(i);
String propertyvalue = row.attribute(fields.get(i)).getValue();
Method method = obj.getClass().getMethod("set"+propertyname,String.class);
method.invoke(obj,propertyvalue);
}
} catch (Exception e) { 

e.printStackTrace();
}
return obj;
}
public static void main(String[] args) throws DocumentException { 

}
}
}

因为工作中接收的数据都是固定格式的,所以其中ROW、FIELD、FIELDNAME放在常量里面。
注意点:

Method method = obj.getClass().getMethod("set"+propertyname,String.class);
method.invoke(obj,propertyvalue);

该代码块中只能识别为String类型的属性,所以使用getObject时务必使传过来的类中的属性全部是String类型的,具体使用时再做转换。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152052.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • phpstorm永久激活码2021【注册码】「建议收藏」

    phpstorm永久激活码2021【注册码】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • python协程系列_python异步多线程

    python协程系列_python异步多线程协程协程(Coroutine),又称微线程,纤程。(协程是一种用户态的轻量级线程)作用:在执行A函数的时候,可以随时中断,去执行B函数,然后中断B函数,继续执行A函数(可以自动切换)

  • Spring MVC @GetMapping和@PostMapping注解的使用

    创建HelloWorldControllerpackagecom.controller;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.GetMapping;impor…

  • 中标麒麟7.0+linux内核版本,中标麒麟7.0下载

    中标麒麟7.0+linux内核版本,中标麒麟7.0下载中标麒麟v7.064位系统是由我国自主研发的一款电脑上使用的linux操作系统,这款电脑系统在经过大量的试验和改进之后,现在的体验是非常不错的,而且性能一级棒,欢迎有兴趣的用户来IT猫扑下载。中标麒麟7.0安装教程1、首先到本页下载中标麒麟7.064位系统,由于系统是iso格式的镜像文件,因此需要通过刻录软件将系统刻录到光盘再进行安装2、插入已刻录“中标麒麟桌面操作系统”的系统光盘,并设置电脑…

    2022年10月21日
  • Google 离线地图_谷歌地图离线包下载手机版

    Google 离线地图_谷歌地图离线包下载手机版google离线地图展示和渲染由于项目的需要,在线地图无法满足业务需要,于是要做离线地图。经过一段时间的调研,最后选择了谷歌离线地图原因是通过现成的工具便可完成。感谢前人栽的树,在此整理总结。以下内容和代码是调研时准备的,仅供参考使用。离线地图制作技术:googlemapapi准备:googlemapapiv3离线版,地图切图工具,Google_Maps_API

  • 微软对ice服务器被炸的态度,我的世界ice服务器火了是因为被炸吗?「建议收藏」

    微软对ice服务器被炸的态度,我的世界ice服务器火了是因为被炸吗?「建议收藏」我的世界ice服务器被炸了这事情在2020年被炒的火热。本来服务器被炸是正常不过的事情了,但是不知道那个玩家在网上说什么ICE服务器价值好几万,炸服务器的玩家应该承担法律责任。而另一方面,炸服务器的凶手“Mn搜索阿喵”也自称服务器被炸之后它日子不好过。然而戏剧性的一幕发生了,3月29号,ICE服务器官方发表声明,说这一切都是造谣而已,所谓的ICE服务器价值没有好几万,服务器也才开了不到两个月。而…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号