xml获取javabean

XML转换成JavaBean

用Dom4j和SAX解析配置文件成java Bean对象

分类: java 2011-08-05 11:13 138人阅读 评论(0) 收藏 举报

[java] view plaincopy

用Dom4j和SAX两种方式将如下配置文件解析成java Bean对象。配置文件(config.xml)如下:pre class=”html” name=”code”?xml version=”1.0″ encoding=”UTF-8″?

Beans

Bean className=”Test” classComment=”测试类”

Field name=”name” type=”String” comment=”名字” /

Field name=”sex” type=”Integer” comment=”性别” /

/Bean

Bean className=”Test1″ classComment=”测试类1″

Field name=”name1″ type=”String” comment=”名字1″ /

Field name=”sex1″ type=”Integer” comment=”性别1″ /

/Bean

/Beans

[java] view plaincopy

首先定义java的三个类Beans、Bean、Field 来承载配置文件的节点,类定义如下:

[java] view plaincopy

/**

* 总对象

* @author

*/

public class Beans {

private ArrayListBean listBean = new ArrayListBean();;

public ArrayListBean getListBean() {

return listBean;

}

public void setListBean(ArrayListBean listBean) {

this.listBean = listBean;

}

}

/**

* 一个Class Bean

* @author

*

*/

public class Bean {

private String className;//类名

private String classComment;//类注释

private ArrayListField listField = new ArrayListField();

public String getClassName() {

return className;

}

public void setClassName(String className) {

this.className = className;

}

public String getClassComment() {

return classComment;

}

public void setClassComment(String classComment) {

this.classComment = classComment;

}

public ArrayListField getListField() {

return listField;

}

public void setListField(ArrayListField listField) {

this.listField = listField;

}

}

/**

* Bean 中的属性对象

* @author

*

*/

public class Field {

//类型

private String type;

//字段名字

private String name;

//字段注释

private String comment;

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getComment() {

return comment;

}

public void setComment(String comment) {

this.comment = comment;

}

}

第一种方式:通过Dom4j的方式解析xml文件:

[java] view plaincopy

[java] view plaincopy

/**

* 将xml格式的字符串转成Beans对象

* @param xml

* @return

*/

public static Beans parseXml(String xml)

{

Beans returnObj = new Beans();

Document doc = null;

try{

// doc = DocumentHelper.parseText(xml); 原版转的是用的这种方式获取document对象,但是测试出错。自己换成了下面方式获取document对象就对了。

SAXReader reader = new SAXReader();

doc = reader.read(new File(xml));

Element root = doc.getRootElement();

//obj list

List list_el = root.elements();

if(list_el !=null list_el.size()0)

{

for(int i =0;ilist_el.size();i++)

{

Element obj_el = (Element) list_el.get(i);

//解析obj 节点

Bean obj = parseObj(obj_el);

returnObj.getListBean().add(obj);

}

}

}catch(Exception e){

e.printStackTrace();

}

return returnObj;

}

/**

* 解析Bean节点

* @param obj_el

* @return

*/

private static Bean parseObj(Element obj_el)

{

Bean obj = new Bean();

obj.setClassName(obj_el.attributeValue(“className”));

obj.setClassComment(obj_el.attributeValue(“classComment”));

//获取field 列表

List list_field = obj_el.elements();

if(list_field != null list_field.size() 0)

{

for(int i = 0;ilist_field.size();i++)

{

Element field_el = (Element)list_field.get(i);

//解析field节点

Field field = parseField(field_el);

obj.getListField().add(field);

}

}

return obj;

}

/**

* 解析Field属性

* @param field_el

* @return

*/

private static Field parseField(Element field_el)

{

Field field = new Field();

List list_attr = field_el.attributes();

if(list_attr != null list_attr.size() 0)

{

for(int i=0;ilist_attr.size();i++)

{

Attribute field_attr = (Attribute)list_attr.get(i);

String key = field_attr.getName();

String value = field_attr.getText();

if(key.equals(“name”))

{

field.setName(value);

}

else if(key.equals(“type”))

{

field.setType(value);

}

else if(key.equals(“comment”))

{

field.setComment(value);

}

}

}

return field;

}

怎么用jaxb技术将xml转成javabean

Java代码

import java.util.ArrayList;

import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlRootElement;

import javax.xml.bind.annotation.XmlTransient;

@XmlRootElement(name=”module”)

public class Module extends Metadata{

@XmlAttribute(name=”name”)

public String name;

@XmlAttribute(name=”template”)

public String template;

@XmlElement

public Resources resources;

@XmlElement

public HeaderItems headerItems;

@XmlElement

public Properties properties;

@XmlElement

public BodyItems bodyItems;

@XmlTransient

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@XmlTransient

public String getTemplate() {

return template;

}

public void setTemplate(String template) {

this.template = template;

}

@XmlTransient

public Resources getResources() {

return resources;

}

public void setResources(Resources resources) {

this.resources = resources;

}

@XmlTransient

public HeaderItems getHeaderItems() {

return headerItems;

}

public void setHeaderItems(HeaderItems headerItems) {

this.headerItems = headerItems;

}

@XmlTransient

public Properties getProperties() {

return properties;

}

public void setProperties(Properties properties) {

this.properties = properties;

}

@XmlTransient

public BodyItems getBodyItems() {

return bodyItems;

}

public void setBodyItems(BodyItems bodyItems) {

this.bodyItems = bodyItems;

}

}

Moduel对象其中一个对象属性:

Java代码

import java.util.List;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlTransient;

public class HeaderItems extends Metadata {

@XmlElement(name=”field”)

private ListField fields;

@XmlTransient

public ListField getFields() {

return fields;

}

public void setFields(ListField fields) {

this.fields = fields;

for (int i=0; ifields.size(); i++)

fields.get(i).setHeaderItem(true);

}

public void clear() {

fields.clear();

}

}

Java代码

package com.morningstar.wfe.metadata.node;

import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlTransient;

public class Map extends Datasource {

@XmlAttribute(name=”name”)

public String name;

@XmlAttribute(name=”type”)

public String type;

@XmlAttribute(name=”url”)

public String url;

@XmlElement

public Entries entries;

public void setName(String name) {

this.name = name;

}

public void setType(String type) {

this.type = type;

}

public void setEntries(Entries entries) {

this.entries = entries;

}

@XmlTransient

public String getName() {

return name;

}

@XmlTransient

public String getType() {

return type;

}

@XmlTransient

public Entries getEntries() {

return this.entries;

}

@XmlTransient

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

public int size() {

if (entries == null) return 0;

return entries.size();

}

public Entry get(int index) {

if (entries == null) return null;

return entries.get(index);

}

public ListEntry getEntriesList() {

return entries.getEntryList();

}

}

最后XML闪亮登场:

Java代码

?xml version=”1.0″ encoding=”UTF-8″?

module name=’showcase’ template=’showcase.ftl’

resources

map name=’css’ type=’static’

entries

entry label=”text_a1″ value=”text_a1″/entry

entry label=”text_a2″ value=”text_a2″/entry

entry label=”text_a3″ value=”text_a3″/entry

entry label=”text_c1″ value=”text_c1″/entry

entry label=”text_c2″ value=”text_c2″/entry

/entries

/map

map name=’status’ type=’ws’ url=”xxxx”

/map

map name=’author’ type=’file’ url=”xxxx”

/map

/resources

headerItems

field name=’active1′ type=’checkbox’ datasource=’css’

multiple=’false’ /

field name=’title1′ type=’text’ format=”string” required=”true”/

field name=’radio11′ type=’radio’ datasource=’css’/

field name=’url11′ type=’url’ format=”string”/

field name=’dropdownlist111′ type=’select’ datasource=’css’ multiple=”true” height=”80″ width=”100″/

field name=’title22′ type=’textarea’ width=”200″ height=”100″ spellCheck=”true” format=”string” required=”true”/

/headerItems

properties

field name=’active12′ type=’checkbox’ datasource=’status’

multiple=’false’ /

field name=’title12′ type=’date’ format=”int” /

field name=’email11′ type=’email’ visible=”true” /

/properties

bodyItems

field label=”Name” name=”name” type=”text” visible=”false”

editable=”false”/field

field name=”readings_list” type=”datatable” action=”insert,remove”

columns

field label=”Title” name=”rSource” type=”text” visible=”true” width=”30″/

field label=”URL” name=”rURL” type=”text” visible=”true” width=”40″/

field label=”Date” name=”rDate” type=”text” visible=”true” width=”50″/

field label=”Source” name=”rSource” type=”text” visible=”true” width=”60″/

/columns

/field

/bodyItems

/module

Metadata是一个抽象类,描述了些 ID NAME VALUE基本属性 没什么特别的

关于XML转java对象的操作:

Java代码

public static Module parse(String metadata) throws MetadataParserException {

Module module = null;

try {

JAXBContext jaxbContext = JAXBContext.newInstance(Module.class);

Unmarshaller um = jaxbContext.createUnmarshaller();

module = (Module)um.unmarshal(new ByteArrayInputStream(metadata.getBytes()));

} catch (JAXBException e) {

log.warn(“JAXB castor failed to convert the metadata to module instance by {}”,e.getMessage());

throw new MetadataParserException();

}

return module;

}

这样的话传进XML的字符串,就可以解析出这个JAVA对象。完全不用写任何过多的代码。岂不爽哉?!!!!

附一个java bean = xml 的unmi同志原创文档,主要是比较Jaxb和castor。

如何用java读取xml文件

1利用dom对象,直接查找标签

2利用工具类,比如xmlbean,直接将xml映像成javabean

xml获取javabean

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月25日 18:30:37
下一篇 2024年3月25日 18:38:48

相关推荐

  • xml格式文件excel打开,Excel文件怎么变成xml文件

    xml文件怎么打开 找到你想要打开的XML文件。XML文件被编码成纯文本,因此,你 可以在任何文本编辑器中打开它们 ,并能在上面清楚地阅读文件内容。 使用Excel打开。 右键点击XML文件,选择 打开方式。 xml文件具体打开步骤如下:用记事本可以打开,首先发现要打开的XML文件。(如下图所示)右击文件,点击“打开方式”的按钮。(如下图所示)选择“打开”模…

    2024年5月22日
    5600
  • java组装xml报文,java组装xml报文含field

    java中频繁xml格式化报文组装不全 你写错了。String xml=dom.asXML();转字符串转早了,放到System.out.println(xml);前面就可以了。 C:\apache-tomcat-0.10\webapps\wutongyi\WEB-INF\classes\com\jshk\web\ac-applicationContext-…

    2024年5月22日
    4200
  • xml解析c语言,xml解析源码c语言

    C语言xml解析 xml文件和txt文件相同,使用普通的文本操作函数即可读取。C语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。 libxml2就可以啊 Libxml2 是一个xml c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费…

    2024年5月21日
    5100
  • java读写xml配置文件,java 读写xml

    JAVA读取XML文件 1、只要更改XML配置文件,就可以正常运行。localhostsqlnameusernamepassword上面这个myenv.xml配置文件一般是放在tomcat的WEB-INF/classes目录下。 2、我们要在应用程序中打开数据库,就必须完成对该文件中drivername、sConnStr、username、password的…

    2024年5月21日
    4700
  • javajdomxml解析,jdk xml解析

    java的XML解析JDOM和DOM4J解析方式有什么区别》? 而jdom和dom4j则是基于底层api的更高级封装;dom是通用的,而jdom和dom4j则是面向java语言的。JDOM的目的是成为 Java 特定文档模型,它简化与 XML 的交互并且比使用 DOM 实现更快。 只读解析方式, 无法修改XML文档的内容。 DOM解析 是用与平台和语言无关的…

    2024年5月18日
    4100
  • java解析xml应答报文,java发送xml请求报文

    java解析xml文件 只要更改XML配置文件,就可以正常运行。localhostsqlnameusernamepassword上面这个myenv.xml配置文件一般是放在tomcat的WEB-INF/classes目录下。 在java环境下读取xml文件的方法主要有4种:DOM、SAX、JDOM、JAXB DOM(Document Object Model…

    2024年5月18日
    3700
  • linux打开xml文件,linux运行xml文件

    我用LINUX上网设置时无法解析XML怎么回事哦 当IE浏览器本身出现故障时,自然会影响到浏览了;或者IE被恶意修改破坏也会导致无法浏览网页。 xml本身是遵守一定的解析法则,如果您当前试图读取的xml文件存在格式不合法额问题,则会导致出现此错误。希望我的回答对您有所帮助,如有疑问,欢迎继续咨询我们。 对于无法解析的文件可能就是经过一定的损坏,然后文件档是打…

    2024年5月17日
    4000
  • javabean转classt,javabean转jsonobject

    javaBean的用法 1、page:JavaBean只能在当前页面中使用。 2、一个 javabean 就是为 jsp 页面上的元素一一开辟一个空间,然后根据需要赋值、读值。 3、JavaBean一般分为可视化组件和非可视化组件两种。可视化组件可以是简单的GUI元素,如按钮或文本框,也可以是复杂的,如报表组件;非可视化组件没有GUI表现形式,用于封装业务逻…

    2024年5月17日
    4100
  • javadom解析xml例子,java dom解析xml

    在java在如何解析XML文件 这里我们使用SAX解析,由于SAX解析器不断在发展,网上有不少文章是针对老版本的。如果你使用JDK4 ,可以参考 使用SAX处理XML文档 一文。这里的程序是根据其改进并且经过实践调试得来的。 在java环境下读取xml文件的方法主要有4种:DOM、SAX、JDOM、JAXB DOM(Document Object Model…

    2024年5月15日
    4100
  • javabean连接数据库,javabean怎么连接mysql

    求:用Java连接数据库和简单的数据库操作代码 创建一个javaProject,并输入如下java代码: package link; import java.sql.*; /** * 使用JDBC连接数据库MySQL的过程 * DataBase:fuck, table:person; * 使用myeclipse对mysql数据库进行增删改查的基本操作。 首先…

    2024年5月14日
    4600

发表回复

登录后才能评论



关注微信