package com.omg.web.util;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.xml.sax.InputSource;
public class XmlUtil {
private static final Log LOG = LogFactory.getLog(XmlUtil.class);
public static String parseXml(String xml, String element) throws Exception {
StringReader read = new StringReader(xml);
// 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);
// 创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
try {
// 通过输入源构造一个Document
Document doc = sb.build(source);
// 取的根元素
Element root = doc.getRootElement();
// 得到根元素所有子元素的集合
List jiedian = root.getChildren();
Element et = null;
for (int i = 0; i < jiedian.size(); i++) {
et = (Element) jiedian.get(i);// 循环依次得到子元素
String name = et.getName();
if (element.equals(name)) {
return et.getText();
}
}
} catch (JDOMException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
return null;
}
/**
* 取得doc
*
* @param xml
* @return
* @throws Exception
*/
public static Document getDocumentByXml(String xml) throws Exception {
try {
StringReader read = new StringReader(xml);
// 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);
// 创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
// 通过输入源构造一个Document
return sb.build(source);
} catch (Exception e) {
LOG.error(new XmlUtil(), e);
}
return null;
}
public static Document readMessage(String filePath) throws Exception {
try {
LOG.info("read message file :" + filePath);
File f = new File(filePath);
if (!f.exists()) {
LOG.info("read message file " + filePath + " is empty!");
return null;
}
SAXBuilder sb = new SAXBuilder();
return sb.build(f);
} catch (Exception e) {
LOG.error(new XmlUtil(), e);
}
return null;
}
public static void writeMessage(String filePath, Document doc) throws Exception {
FileOutputStream fos = null;
try {
File f = new File(filePath);
XMLOutputter out = new XMLOutputter();
fos = new FileOutputStream(f);
out.output(doc, fos);
LOG.info("save xml success ..............");
} catch (Exception e) {
LOG.error(new XmlUtil(), e);
} finally {
if (null != fos) {
fos.close();
}
}
}
public static void writeMessage(String filePath, String mobile,
String title, String message, String url) throws Exception {
FileOutputStream fos = null;
try {
FileUtil.createDirectory(filePath);
File f = new File(filePath + mobile + ".xml");
Document doc = null;
if (f.exists()) {
SAXBuilder sb = new SAXBuilder();
doc = sb.build(f);
}
if (null == doc) {
doc = new Document();
}
Element root;
if (doc.hasRootElement()) {
root = doc.getRootElement();
} else {
root = new Element("user");
doc.addContent(root);
}
Element info = new Element("info");
info.addContent(new Element("title").setText(title));
info.addContent(new Element("message").setText(message));
info.addContent(new Element("url").setText(url));
root.addContent(info);
XMLOutputter out = new XMLOutputter();
fos = new FileOutputStream(f);
out.output(doc, fos);
LOG.info(title + " save message success ..............");
} catch (Exception e) {
LOG.error(new XmlUtil(), e);
} finally {
if (null != fos) {
fos.close();
}
}
}
/**
* 解析对象bean
*
* @param <E>
*
* @param xml
* xml内容
* @param cls
* 对象bean
* @return
*/
public static <E> E decodeXml(String xml, Class<E> cls) {
try {
Document doc = XmlUtil.getDocumentByXml(xml);
if (null == doc)
return null;
Element root = doc.getRootElement();
if (null == root)
return null;
List<Element> els = root.getChildren();
// 获取对象bean属性数组
PropertyDescriptor[] props = Introspector.getBeanInfo(cls,
Introspector.IGNORE_ALL_BEANINFO).getPropertyDescriptors();
E obj = cls.newInstance();
if (null != els && els.size() > 0) {
for (PropertyDescriptor prop : props) {
if (null != prop.getWriteMethod()) {
String text = els.get(0).getChildTextTrim(
StringUtil.getDisplayName(prop));
if (StringUtil.isBlank(text))
text = els.get(0).getChildTextTrim(prop.getDisplayName());
//System.out.println(prop.getDisplayName() + "=" + text);
prop.getWriteMethod().invoke(obj, text);
}
}
}
return obj;
} catch (Exception e) {
LOG.error(new XmlUtil(), e);
}
return null;
}
/**
* 解析成list
*
* @param <E>
*
* @param xml
* xml解析内容
* @param cls
* 对象bean
* @return
*/
public static <E> List<E> decodeXmlList(String xml, Class<E> cls) {
try {
Document doc = XmlUtil.getDocumentByXml(xml);
if (null == doc)
return null;
Element root = doc.getRootElement();
if (null == root)
return null;
List<Element> els = root.getChildren();
List<E> list = new ArrayList<E>();
// 获取对象bean属性数组
PropertyDescriptor[] props = Introspector.getBeanInfo(cls,
Introspector.IGNORE_ALL_BEANINFO).getPropertyDescriptors();
for (Element el : els) {
E obj = cls.newInstance();
for (PropertyDescriptor prop : props) {
if (null != prop.getWriteMethod()) {
String text = el.getChildText(
StringUtil.getDisplayName(prop));
if (StringUtil.isBlank(text))
text = els.get(0).getChildTextTrim(prop.getDisplayName());
//System.out.println(prop.getDisplayName() + "=" + text);
prop.getWriteMethod().invoke(obj, text);
}
}
list.add(obj);
}
return list;
} catch (Exception e) {
LOG.error(new XmlUtil(), e);
}
return null;
}
public static String deleteDom(String xml) throws Exception {
byte[] bs = xml.getBytes();
for (int i=0; i<bs.length; i++) {
if (bs[i] == -17 && bs[i+1] == -69 && bs[i+2] == -65) {
xml = new String(bs, 0, i) + new String(bs, i+3, bs.length - (i+3));
break;
}
}
return xml;
}
public static void main(String[] args) {
try {
String xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><tasks><Table><Column1>0</Column1></Table></tasks>";
System.out.println(XmlUtil.getDocumentByXml(XmlUtil.deleteDom(xml)));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.xml.sax.InputSource;
public class XmlUtil {
private static final Log LOG = LogFactory.getLog(XmlUtil.class);
public static String parseXml(String xml, String element) throws Exception {
StringReader read = new StringReader(xml);
// 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);
// 创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
try {
// 通过输入源构造一个Document
Document doc = sb.build(source);
// 取的根元素
Element root = doc.getRootElement();
// 得到根元素所有子元素的集合
List jiedian = root.getChildren();
Element et = null;
for (int i = 0; i < jiedian.size(); i++) {
et = (Element) jiedian.get(i);// 循环依次得到子元素
String name = et.getName();
if (element.equals(name)) {
return et.getText();
}
}
} catch (JDOMException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
return null;
}
/**
* 取得doc
*
* @param xml
* @return
* @throws Exception
*/
public static Document getDocumentByXml(String xml) throws Exception {
try {
StringReader read = new StringReader(xml);
// 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);
// 创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
// 通过输入源构造一个Document
return sb.build(source);
} catch (Exception e) {
LOG.error(new XmlUtil(), e);
}
return null;
}
public static Document readMessage(String filePath) throws Exception {
try {
LOG.info("read message file :" + filePath);
File f = new File(filePath);
if (!f.exists()) {
LOG.info("read message file " + filePath + " is empty!");
return null;
}
SAXBuilder sb = new SAXBuilder();
return sb.build(f);
} catch (Exception e) {
LOG.error(new XmlUtil(), e);
}
return null;
}
public static void writeMessage(String filePath, Document doc) throws Exception {
FileOutputStream fos = null;
try {
File f = new File(filePath);
XMLOutputter out = new XMLOutputter();
fos = new FileOutputStream(f);
out.output(doc, fos);
LOG.info("save xml success ..............");
} catch (Exception e) {
LOG.error(new XmlUtil(), e);
} finally {
if (null != fos) {
fos.close();
}
}
}
public static void writeMessage(String filePath, String mobile,
String title, String message, String url) throws Exception {
FileOutputStream fos = null;
try {
FileUtil.createDirectory(filePath);
File f = new File(filePath + mobile + ".xml");
Document doc = null;
if (f.exists()) {
SAXBuilder sb = new SAXBuilder();
doc = sb.build(f);
}
if (null == doc) {
doc = new Document();
}
Element root;
if (doc.hasRootElement()) {
root = doc.getRootElement();
} else {
root = new Element("user");
doc.addContent(root);
}
Element info = new Element("info");
info.addContent(new Element("title").setText(title));
info.addContent(new Element("message").setText(message));
info.addContent(new Element("url").setText(url));
root.addContent(info);
XMLOutputter out = new XMLOutputter();
fos = new FileOutputStream(f);
out.output(doc, fos);
LOG.info(title + " save message success ..............");
} catch (Exception e) {
LOG.error(new XmlUtil(), e);
} finally {
if (null != fos) {
fos.close();
}
}
}
/**
* 解析对象bean
*
* @param <E>
*
* @param xml
* xml内容
* @param cls
* 对象bean
* @return
*/
public static <E> E decodeXml(String xml, Class<E> cls) {
try {
Document doc = XmlUtil.getDocumentByXml(xml);
if (null == doc)
return null;
Element root = doc.getRootElement();
if (null == root)
return null;
List<Element> els = root.getChildren();
// 获取对象bean属性数组
PropertyDescriptor[] props = Introspector.getBeanInfo(cls,
Introspector.IGNORE_ALL_BEANINFO).getPropertyDescriptors();
E obj = cls.newInstance();
if (null != els && els.size() > 0) {
for (PropertyDescriptor prop : props) {
if (null != prop.getWriteMethod()) {
String text = els.get(0).getChildTextTrim(
StringUtil.getDisplayName(prop));
if (StringUtil.isBlank(text))
text = els.get(0).getChildTextTrim(prop.getDisplayName());
//System.out.println(prop.getDisplayName() + "=" + text);
prop.getWriteMethod().invoke(obj, text);
}
}
}
return obj;
} catch (Exception e) {
LOG.error(new XmlUtil(), e);
}
return null;
}
/**
* 解析成list
*
* @param <E>
*
* @param xml
* xml解析内容
* @param cls
* 对象bean
* @return
*/
public static <E> List<E> decodeXmlList(String xml, Class<E> cls) {
try {
Document doc = XmlUtil.getDocumentByXml(xml);
if (null == doc)
return null;
Element root = doc.getRootElement();
if (null == root)
return null;
List<Element> els = root.getChildren();
List<E> list = new ArrayList<E>();
// 获取对象bean属性数组
PropertyDescriptor[] props = Introspector.getBeanInfo(cls,
Introspector.IGNORE_ALL_BEANINFO).getPropertyDescriptors();
for (Element el : els) {
E obj = cls.newInstance();
for (PropertyDescriptor prop : props) {
if (null != prop.getWriteMethod()) {
String text = el.getChildText(
StringUtil.getDisplayName(prop));
if (StringUtil.isBlank(text))
text = els.get(0).getChildTextTrim(prop.getDisplayName());
//System.out.println(prop.getDisplayName() + "=" + text);
prop.getWriteMethod().invoke(obj, text);
}
}
list.add(obj);
}
return list;
} catch (Exception e) {
LOG.error(new XmlUtil(), e);
}
return null;
}
public static String deleteDom(String xml) throws Exception {
byte[] bs = xml.getBytes();
for (int i=0; i<bs.length; i++) {
if (bs[i] == -17 && bs[i+1] == -69 && bs[i+2] == -65) {
xml = new String(bs, 0, i) + new String(bs, i+3, bs.length - (i+3));
break;
}
}
return xml;
}
public static void main(String[] args) {
try {
String xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><tasks><Table><Column1>0</Column1></Table></tasks>";
System.out.println(XmlUtil.getDocumentByXml(XmlUtil.deleteDom(xml)));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
发表评论
-
java 读取Excel文件
2013-04-12 13:16 1219package com.aia.util; impor ... -
java ftp操作
2013-04-10 15:09 4037代码一: package com.aia.util; i ... -
用Apache POI将JTable表格数据导出生成Excel文件
2013-04-08 09:06 3575用 Apache POI 将JTable表格数据导出生成Ex ... -
Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
2013-03-25 10:40 952Java解析xml、解析xml四种方法、DOM、SAX、J ... -
HTML导出数据生成excel
2013-03-22 10:36 963package com.fuxin.app.action. ... -
java实用工具(zip)
2013-03-21 16:14 873解压: package com.util.zip; impor ... -
问题汇总
2013-03-20 16:52 7921. 有时候eclipse会抽疯,项目更新tomcat重启后运 ... -
java实用工具(用3des进行ios加密后台解密)
2013-03-19 13:21 2725IOS 学习通信加密 通信加解密基本算是每个涉及到用户信息的客 ... -
java实用工具(加密)
2013-03-19 13:15 903声明:本文引自http://highill.iteye.com ... -
java实用工具(mail)
2013-03-19 13:16 824最简单的发送邮件方法 package com.omg.web ... -
java实用工具(字符串)
2013-03-18 09:45 842package com.omg.web.util; impo ... -
java实用工具(图片)
2013-03-18 09:43 1007package com.omg.web.util; impo ... -
java实用工具(文件)
2013-03-18 09:41 829package com.omg.web.util; impo ... -
java实用工具(时间日期)
2013-03-18 09:38 1015时间工具: package com.omg.web.uti ...
相关推荐
总的来说,"xml 转Java bean工具"是开发过程中非常实用的辅助工具,能够帮助开发者节省时间,提高代码质量。通过解析XML文件并生成对应的Java Bean,它使得数据处理变得更加便捷。安装文件的提供意味着用户可以直接...
XML文件自动转换为Java对象工具是一种实用的开发辅助软件,它可以帮助程序员快速地将XML数据映射到Java类,从而简化了数据处理的过程。在Java开发中,XML常被用作数据交换格式,但手动编写Java类来表示XML结构既耗时...
Java实用工具包中的XML处理是Java开发者经常遇到的一项任务,特别是在处理数据交换、配置文件或者存储结构化数据时。XML(eXtensible Markup Language)因其结构清晰、可读性强的特点,被广泛应用。本工具包专门针对...
总结来说,`EasyXmlUtil`是一个实用的Java工具类,它封装了XML与Map之间的相互转换功能,使得开发者能方便快捷地处理这两种数据格式。通过理解和使用此类,可以提高开发效率,简化数据处理的复杂性。在项目中,只需...
XML(eXtensible Markup Language...总之,“XML转Java代码工具”是软件开发中的一个实用辅助工具,它利用XML的结构信息生成相应的Java类,帮助开发者快速地将XML数据集成到Java应用程序中,提升了开发效率和代码质量。
Java实用工具包大众型XML处理主要关注的是在Java编程环境中如何高效、便捷地处理XML文档。XML(Extensible Markup Language)是一种广泛用于数据交换和存储的标记语言,它具有良好的可读性和结构化特性,因此在Java...
JAVA实用工具类
【JAVA对象序列化保存为XML文件的工具类】 在Java编程中,对象序列化是一种将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。而在反序列化时,这个字节流又可以恢复为原来的对象。Java提供了一个方便...
在实际应用中,用户可能需要根据不同的需求自定义导出格式,Java 实用文件小工具可能提供了XML、JSON或CSV等多种导出格式,以便于在各种环境中使用。此外,工具可能还支持命令行接口,方便自动化脚本调用,进一步...
Java XML-repair修复工具类是Java编程中处理XML文档时的一种实用工具,它主要用于修复XML文件的格式问题,确保XML文档符合W3C标准,从而能够被正确解析和处理。XML(eXtensible Markup Language)是一种用于标记数据...
让xml处理无门槛,你会爱上使用xml文件。 该包主要工作是封装,把操作简单明了化,可以让那些对document的东东望而生畏的人不用去"头痛",使用xml处理很简单明了。上面的3个例子只有取属性,其实还有advanceGetNode...
这篇博客“实用工具(一)——Java对象类、XML格式的相互转换”主要探讨了如何在Java编程中处理对象与XML之间的互换。XML(eXtensible Markup Language)是一种结构化数据格式,广泛用于数据交换和存储,而Java对象...
Castor是一款强大的Java库,它提供了Java对象到XML数据的自动转换功能,反之亦然。这个插件的主要目的是简化XML处理,特别是在Java应用程序中。它通过创建映射文件...在处理大量XML数据时,它是一个非常实用的工具。
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储等领域。Java作为一种跨平台的编程语言,提供了丰富的库...对于处理大量XML数据的项目,这样的工具显得尤为实用。
《Java XML编程指南》是一本面向Java开发人员的实用教程,旨在帮助读者深入理解XML(eXtensible Markup Language)在Java环境中的应用。XML作为一种数据交换格式,因其灵活性和可扩展性,广泛用于Web服务、配置文件...
本资源提供的"JAVA工具类"整合了XML处理、JSON操作、MD5加密以及加解密功能,对提高开发效率大有裨益。 1. **XML处理**: - DOM解析:DOM(Document Object Model)是一种将XML文档映射为树形结构的方法,通过它...
这个工具的实用性很强。我认为,重要的不是技术,而是思想。 做过Android开发的程序员都知道,Android框架中所有资源都是通过XML配置文件来管理的,很好的实现了界面与业务代码的分离,提高了可扩展性。 我做这个小...
[工具类] XML 实用工具类 .java.txt [工具类] XML工具类2 .java.txt [工具类] 测试Mysql的最大连接数 .java.txt [工具类] 读取、打印输出、保存xml .java.txt [工具类] 分页split_page.jsp .jsp.txt [工具类] 获得...
4. **XML数据集成**:工具提供了与各种数据库的连接,可以将XML数据导入或导出到不同的数据库系统,增强了XML数据的实用性。 5. **图形化XML实例生成**:通过XMLSpy,用户可以以图形化方式创建XML实例,这对于理解...
10. **JAXB2 Basics**:这个扩展库为JAXB提供了更多实用功能,如注解处理器和转换工具。 在实际项目中,选择哪种解析方式取决于需求,如文件大小、性能要求、内存限制以及对XML操作的复杂程度。正确使用这些JAR文件...