`
sgm881218
  • 浏览: 58323 次
社区版块
存档分类
最新评论

java实用工具(XML)

    博客分类:
  • java
阅读更多
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();
}
}
}
分享到:
评论

相关推荐

    xml 转Java bean工具

    总的来说,"xml 转Java bean工具"是开发过程中非常实用的辅助工具,能够帮助开发者节省时间,提高代码质量。通过解析XML文件并生成对应的Java Bean,它使得数据处理变得更加便捷。安装文件的提供意味着用户可以直接...

    xml文件自动转成java对象工具

    XML文件自动转换为Java对象工具是一种实用的开发辅助软件,它可以帮助程序员快速地将XML数据映射到Java类,从而简化了数据处理的过程。在Java开发中,XML常被用作数据交换格式,但手动编写Java类来表示XML结构既耗时...

    java实用工具包大众型XML处理

    Java实用工具包中的XML处理是Java开发者经常遇到的一项任务,特别是在处理数据交换、配置文件或者存储结构化数据时。XML(eXtensible Markup Language)因其结构清晰、可读性强的特点,被广泛应用。本工具包专门针对...

    java一键xml转map,一键map转xml工具类

    总结来说,`EasyXmlUtil`是一个实用的Java工具类,它封装了XML与Map之间的相互转换功能,使得开发者能方便快捷地处理这两种数据格式。通过理解和使用此类,可以提高开发效率,简化数据处理的复杂性。在项目中,只需...

    XML转java代码工具

    XML(eXtensible Markup Language...总之,“XML转Java代码工具”是软件开发中的一个实用辅助工具,它利用XML的结构信息生成相应的Java类,帮助开发者快速地将XML数据集成到Java应用程序中,提升了开发效率和代码质量。

    java实用工具包大众型XML处理.zip

    Java实用工具包大众型XML处理主要关注的是在Java编程环境中如何高效、便捷地处理XML文档。XML(Extensible Markup Language)是一种广泛用于数据交换和存储的标记语言,它具有良好的可读性和结构化特性,因此在Java...

    JAVA实用工具类

    JAVA实用工具类

    JAVA对象序列化保存为XML文件的工具类

    【JAVA对象序列化保存为XML文件的工具类】 在Java编程中,对象序列化是一种将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。而在反序列化时,这个字节流又可以恢复为原来的对象。Java提供了一个方便...

    java实用文件小工具

    在实际应用中,用户可能需要根据不同的需求自定义导出格式,Java 实用文件小工具可能提供了XML、JSON或CSV等多种导出格式,以便于在各种环境中使用。此外,工具可能还支持命令行接口,方便自动化脚本调用,进一步...

    java xml-repair修复工具类

    Java XML-repair修复工具类是Java编程中处理XML文档时的一种实用工具,它主要用于修复XML文件的格式问题,确保XML文档符合W3C标准,从而能够被正确解析和处理。XML(eXtensible Markup Language)是一种用于标记数据...

    java实用工具包(大众型)--XML处理

    让xml处理无门槛,你会爱上使用xml文件。 该包主要工作是封装,把操作简单明了化,可以让那些对document的东东望而生畏的人不用去"头痛",使用xml处理很简单明了。上面的3个例子只有取属性,其实还有advanceGetNode...

    实用工具(一)-------java对象类、XML格式的相互转换

    这篇博客“实用工具(一)——Java对象类、XML格式的相互转换”主要探讨了如何在Java编程中处理对象与XML之间的互换。XML(eXtensible Markup Language)是一种结构化数据格式,广泛用于数据交换和存储,而Java对象...

    castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具

    Castor是一款强大的Java库,它提供了Java对象到XML数据的自动转换功能,反之亦然。这个插件的主要目的是简化XML处理,特别是在Java应用程序中。它通过创建映射文件...在处理大量XML数据时,它是一个非常实用的工具。

    XML规范检查小java工具

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储等领域。Java作为一种跨平台的编程语言,提供了丰富的库...对于处理大量XML数据的项目,这样的工具显得尤为实用。

    java_xml编程指南

    《Java XML编程指南》是一本面向Java开发人员的实用教程,旨在帮助读者深入理解XML(eXtensible Markup Language)在Java环境中的应用。XML作为一种数据交换格式,因其灵活性和可扩展性,广泛用于Web服务、配置文件...

    JAVA工具类(整合,xml,json,MD5,加密解密)

    本资源提供的"JAVA工具类"整合了XML处理、JSON操作、MD5加密以及加解密功能,对提高开发效率大有裨益。 1. **XML处理**: - DOM解析:DOM(Document Object Model)是一种将XML文档映射为树形结构的方法,通过它...

    Java swing 可通过XML配置菜单条JMenuBar的工具

    这个工具的实用性很强。我认为,重要的不是技术,而是思想。 做过Android开发的程序员都知道,Android框架中所有资源都是通过XML配置文件来管理的,很好的实现了界面与业务代码的分离,提高了可扩展性。 我做这个小...

    30个java工具类

    [工具类] XML 实用工具类 .java.txt [工具类] XML工具类2 .java.txt [工具类] 测试Mysql的最大连接数 .java.txt [工具类] 读取、打印输出、保存xml .java.txt [工具类] 分页split_page.jsp .jsp.txt [工具类] 获得...

    xml开发工具xmlspy

    4. **XML数据集成**:工具提供了与各种数据库的连接,可以将XML数据导入或导出到不同的数据库系统,增强了XML数据的实用性。 5. **图形化XML实例生成**:通过XMLSpy,用户可以以图形化方式创建XML实例,这对于理解...

    java操作xml相关jar

    10. **JAXB2 Basics**:这个扩展库为JAXB提供了更多实用功能,如注解处理器和转换工具。 在实际项目中,选择哪种解析方式取决于需求,如文件大小、性能要求、内存限制以及对XML操作的复杂程度。正确使用这些JAR文件...

Global site tag (gtag.js) - Google Analytics