利用simpleframework解析xml

本文详细介绍了如何根据XML文档构建对应的Bean类,并通过SimpleFramework解析XML内容以获取各层级元素及属性。同时,提供了关于Bean类属性命名规则、XML读取方法以及不同解析场景的建议。

1.按照xml编写对应的bean文件

类似于树的先根遍历,从最深一层的元素开始创建对应的bean类,用@Element标识元素,@Attribute标识元素属性。除root元素、最深一层元素,其他层元素对应的bean类都需将其子元素的bean作为属性引入。对于下面的xml文档:

<configManager>
   <testEnvCofig>
      <fullfilSystem username="auto-test" userpassword="auto1nthebox">
         <url>http://172.16.0.160:8080/v3center/login1.jsp</url>
         <databasename>products_center_v1</databasename>
      </fullfilSystem>
      <procurementSystem username="auto-test" userpassword="auto1nthebox">
         <url>http://172.16.0.161:8080/v3center/login1.jsp</url>
         <databasename>products_center_v1</databasename>
      </procurementSystem>
      <wmsSystem username="zhangfei" userpassword="wms">
         <url>http://172.16.0.162:8080/login_input.do</url>
         <databasename>wms</databasename>
      </wmsSystem>
      <dblocation>172.16.0.166</dblocation>
      <dbusername>db_admin</dbusername>
      <dbpassword>light2902</dbpassword>
   </testEnvCofig>
</configManager>

对应的bean文件依次为

public class BeanSystem {
	@Element
	private String url;
	@Element
	private String databasename;
	@Attribute
	private String username;
	@Attribute
	private String userpassword;

	//getter and setter
}

package com.litb.bida.test.xmlSerializer;

import org.simpleframework.xml.Element;

public class BeanEnvironment {
	@Element
	private BeanSystem fullfilSystem;
	@Element
	private BeanSystem procurementSystem;
	@Element
	private BeanSystem wmsSystem;
	@Element
	private String dblocation;
	@Element
	private String dbusername;
	@Element
	private String dbpassword;
	
//getter and setter

}

public class BeanCfg {
	@Element
	private BeanEnvironment testEnvCofig;
//getter and setter	

}


需要注意的时Bean类的属性值名称必须与xml文档中的元素及属性值一致。


2.读取xml内容

File file = new File("testconfig.xml");
BeanCfg cfg = new BeanCfg();
Serializer ser = new Persister();
ser.read(cfg,file);

即可从cfg开始获取各个层级的元素及属性

对于格式比较简单,起没有重复元素的xml,可以采用simpleframework来解析,对于文件比较大,且重复内容过的的,由于编写对应的bean文件比较耗时,则不太合适这种方法。

### 获取 `org.simpleframework.xml.convert.AnnotationStrategy` 类中 `getRoot` 方法的实现与用途 `org.simpleframework.xml.convert.AnnotationStrategy` 是 Simple XML 框架中的一个类,主要用于处理注解驱动的序列化和反序列化过程。该类提供了一些方法来解析和操作带有注解的 Java 对象。 #### `getRoot` 方法的作用 `getRoot` 方法用于获取一个对象的根元素名称,该名称通常由 `@Root` 注解定义。此方法在序列化和反序列化过程中非常重要,因为它决定了 XML 文档的根元素名称。 #### `getRoot` 方法的实现 以下是一个简化的 `getRoot` 方法的实现示例,基于 Simple XML 框架的核心逻辑: ```java public class AnnotationStrategy { public String getRoot(Object value) { if (value != null) { Class<?> type = value.getClass(); Root root = type.getAnnotation(Root.class); if (root != null) { return root.name(); } } return null; } } ``` 在此实现中: - 首先检查传入的对象是否为 `null`。 - 如果对象不为 `null`,则获取其类类型。 - 使用 `getAnnotation` 方法获取类上的 `@Root` 注解。 - 如果注解存在,则返回注解中的 `name()` 值,即根元素名称;否则返回 `null`。 #### 使用示例 假设有一个使用 `@Root` 注解的类: ```java import org.simpleframework.xml.Root; @Root(name = "person") public class Person { // 类内容 } ``` 可以通过以下方式使用 `getRoot` 方法: ```java public class Main { public static void main(String[] args) { AnnotationStrategy strategy = new AnnotationStrategy(); Person person = new Person(); String rootName = strategy.getRoot(person); System.out.println("Root name: " + rootName); // 输出 "Root name: person" } } ``` 在此示例中,`getRoot` 方法返回了 `Person` 类上定义的根元素名称 `"person"`。 #### 注意事项 - `@Root` 注解是 Simple XML 框架的一部分,用于指定 XML 文档的根元素名称。 - 如果类没有使用 `@Root` 注解,则 `getRoot` 方法将返回 `null`。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值