package com.huawei.t0901_betwixt;
import java.beans.IntrospectionException;
import java.io.File;
import java.io.IOException;
import org.apache.commons.betwixt.io.BeanReader;
import org.xml.sax.SAXException;
public class TestMain
{
// 请求文件地址
private static final String PATH = "src/userReq.xml";
// 实体类
private static final String BEAN_CLASS = "com.huawei.t0901_betwixt.UserReq";
public static void main(String[] args)
throws ClassNotFoundException, IntrospectionException, IOException, SAXException
{
BeanReader reader = new BeanReader();
Class clazz = Class.forName(BEAN_CLASS);
UserReq uq = (UserReq) parseXml(clazz,reader);
for (User u : uq.getUser())
{
System.out.println(u + "\n-----------");
}
}
private static Object parseXml(Class clazz, BeanReader reader)
throws IntrospectionException, IOException, SAXException
{
// 注册
reader.registerBeanClass(clazz);
// 解析xml
return reader.parse(new File(PATH));
}
}
------------------------User-------------------------
package com.huawei.t0901_betwixt;
public class User
{
// 姓名
private String name = "--";
// 电话
private String tel;
// 性别
private String sex;
// 地址
private String address;
/**
* 默认构造函数
*/
public User()
{
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getTel()
{
return tel;
}
public void setTel(String tel)
{
this.tel = tel;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
public String getAddress()
{
return address;
}
public void setAddress(String address)
{
this.address = address;
}
@Override
public String toString()
{
return "姓名:" + name + "\n性别:" + (sex.equalsIgnoreCase("M") ? "男" : "女")
+ "\n联系电话:" + tel + "\n家庭地址:" + address;
}
}
--------------------UserReq----------------------
package com.huawei.t0901_betwixt;
import java.util.ArrayList;
import java.util.List;
/**
* 用户请求
*
* @author chenglia
* @version [版本号, 2011-9-1]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class UserReq
{
// 用户
private List<User> user = new ArrayList<User>();
/**
* 默认构造函数
*/
public UserReq()
{
}
public List<User> getUser()
{
return user;
}
public void setUser(List<User> user)
{
this.user = user;
}
public void addUser(User u)
{
user.add(u);
}
}
--------------------userReq.bewixt-----------
<info primitiveTypes="element">
<element name="userReq">
<element name="user" property="user" updater="addUser" />
<addDefaults/>
</element>
</info>
----------------------user.bewixt-------------
<info primitiveTypes="element">
<element name="user">
<addDefaults/>
</element>
</info>
分享到:
相关推荐
本篇文章将深入探讨如何使用Betwixt库实现XML与Java类之间的互转解析。 首先,我们需要理解Betwixt的基本概念。Betwixt是一个XML绑定工具,它允许开发者通过注解或XML配置文件来映射XML结构与Java类的属性。这种...
这里,我们创建了一个`BeanReader`,注册了`Person`和`Address`类,然后解析XML输入流,生成相应的Java Bean实例。 在实际应用中,`TestBetwixt`可能包含具体的测试代码,用于验证上述转换过程是否正确。测试通常会...
4. **XML到Java对象**:使用`BeanWriter`将XML文档解析为Java对象。`BeanWriter`会在指定的输出流或文件上写入XML,将XML数据转换为Java对象。 5. **Java对象到XML**:使用`BeanReader`将Java对象转换为XML。`...
标题"betwixt文件解析"指的是使用Betwixt库来解析XML文件,并将其中的数据映射到Java对象上。Betwixt通过自动的注解处理和类的反射机制,能够自动构建XML与Java对象之间的对应关系。这种方式极大地减少了开发者手动...
这将从"person.xml"文件中解析数据,并创建一个新的Person对象。 五、自定义XML标签和属性 Betwixt允许你通过使用`@xml`注解来自定义XML标签和属性的映射。例如: ```java @Xml(name="person", attributes={"id"}) ...
- **DOM解析**:解析XML文档,创建一个Document对象,然后遍历XML节点,调用JavaBean的setter方法设置属性值。 - **SAX(Simple API for XML)**:非回溯事件驱动的解析方式,根据XML事件调用相应的处理函数,逐个...
通过使用Betwixt,开发者可以轻松地将XML文档解析为Java对象,或者将Java对象序列化为XML文档。这极大地简化了数据交换和持久化的过程。 在本例子中,我们使用的版本是`commons-betwixt-0.8.jar`。这个库包含了一组...
在实际应用中,Apache Commons Betwixt可以用于构建Web服务、持久化层或者配置文件的解析。由于0.8版本相对较旧,它可能不包含后来版本中的一些增强特性,例如更好的性能优化、对Java新特性的支持或更丰富的映射选项...
这种映射机制使得开发者无需手动编写大量的XML解析和序列化代码,降低了出错的可能性,也提高了代码的可读性和可维护性。 在"commons-betwixt-0.5-src.zip"这个压缩包中,包含了源代码,你可以深入研究其内部实现,...
这样,开发者就不需要手动解析XML来创建或更新Java对象,也不需要编写大量代码去序列化Java对象为XML。 在使用Betwixt时,首先你需要定义Java类,并在类或者属性上添加特殊的注解来指示它们与XML元素的对应关系。...
`XMLReader`从XML输入流中读取,`XMLBeanInfo`则用来解析XML并创建相应的Java对象实例。 在提供的`01obj2xml`文件中,很可能是包含了演示如何进行这些操作的代码。该文件可能包括了以下内容: - 一个简单的Java对象...
- **commons-digester-2.1.jar**:Apache Commons Digester是一个处理XML文档的工具,通过定义规则链,可以在解析XML时自动创建和配置Java对象,非常适合于从XML配置文件中构建对象模型。 - **commons-logging-...
这样,开发者可以轻松地处理这些数据,而无需手动解析XML。 ### 3. 使用步骤 使用BetwixtXML的步骤包括以下几个关键部分: #### (1) 创建Java类 首先,定义要序列化或反序列化的Java类。这些类通常包含与XML元素...
Digester模块提供了一种基于事件驱动的XML解析机制,它通过监听XML解析器产生的事件,执行相应的处理器方法。这种模式非常适合于复杂的XML文档解析任务,尤其是在需要将XML数据转换为Java对象模型的情况下。 ### 5....
Commons-Digester 是一个 XML-Java对象的映射工具,用于解析 XML配置文件. Discovery Commons-Discovery 提供工具来定位资源 (包括类) ,通过使用各种模式来映射服务/引用名称和资源名称。. EL Commons-EL 提供在...
JAXB提供两种主要特性:将一个Java对象序列化为XML,以及反向操作,将XML解析成Java对象。当XML格式复杂且经常变化时,JAXB特别有用。在这种情况下,经常修改XML模板,可以使用JAXB来生成Java类,并将XML文档映射到...
- **Digester**:解析XML文档,并根据预定义的规则自动创建和配置Java对象。 - **Jelly**:基于标签库的脚本语言,用于生成XML或Java代码。 - **JXPath**:使用XPath表达式在Java对象模型(如Map和JavaBean)中...
Commons Digester 提供了一个简单易用的框架来解析XML文档并映射到Java对象。对于需要处理XML数据的应用程序而言,它极大地简化了开发过程。 #### Commons Lang (commons-lang.jar) Commons Lang 是一个实用工具库...
3. **commons-betwixt-0.8.zip**:Betwixt是一个对象到XML绑定工具,它可以自动将Java对象序列化为XML,并从XML反序列化回对象,帮助开发者处理XML数据。 4. **commons-lang-2.4-bin.zip**:Lang提供了一些在Java...