java xml解析 注解_GitHub - lijieqing/XMLParser: 通过注解方式,用于XML的快速生成和解析...

XMLParser

通过注解方式,用于XML的快速生成和解析

XMLParser介绍

XMLParser 是一款Android XML文件解析生成工具,通过注解的方式来实现XML文件内标签的生成和解析。

使用gradle引入

compile 'lee.hua.xmlparse:xmlparse:2.2.2'

简单使用

场景:一个关于书本信息的描述,一本书包含书名、页数、价格、作者、出版社等信息,我们用JAVA对象简单表示出来,如下

@XmlBean(name = "BookNode")//XMLParser类注解,表示此类是一个XML标签,name表示输出的标签名

public class Book {

@XmlAttribute

public String name;//书名

@XmlAttribute

public Integer page;//页数

@XmlAttribute

public Float price;//价格

@XmlSingleNode(name = "Publisher",nodeType = Publisher.class)//XMLParser属性注解,表示一个子标签

public Publisher publishier;//出版商

@XmlListNode(name = "Author",nodeType = Author.class)//XMLParser属性注解,表示多个子标签

public List authors;//作者,多个

//省略无参构造 getter setter 和 toString 方法

}

@XmlBean(name = "Author")

public class Author {

@XmlAttribute

public String name;//作者名

//省略无参构造 getter setter 和 toString 方法

}

@XmlBean(name = "Publisher")

public class Publisher {

@XmlAttribute(name = "PUB") //XMLParser属性注解,name表示输出的属性名

public String pub;//出版社名称

//省略无参构造 getter setter 和 toString 方法

}

定义好对象之后我们就可以使用XMLParser来输出和解析了.

生成XML代码如下:

//生成XML文件

public void generate(){

//生成book数据

Book book = new Book();

book.setName("XMLParser解析");

book.setPage(55);

book.setPrice(37.5f);

book.setPublishier(new Publisher("中国花花出版社"));

List authors = new ArrayList<>();

for (int i = 0; i < 4; i++) {

Author author = new Author("author0"+i);

authors.add(author);

}

book.setAuthors(authors);

//设置注解扫描路径

XMLAPI.setXmlBeanScanPackage("com.lee");

//输出book对象

XMLAPI.writeObj2Xml(book,"/Users/lijie/Desktop/test.xml");

}

结果:

text.xml

解析XML文件,我们使用刚才输出的test.xml文佳作为解析对象,代码如下:

public void readXML(){

//设置注解扫描路径

XMLAPI.setXmlBeanScanPackage("com.lee");

//调用readXML读取文件,并强转为Book对象

Book book = (Book) XMLAPI.readXML(new FileInputStream("/Users/lijie/Desktop/test.xml"));

//打印

System.out.println(book);

}

打印结果:

Book{

name='XMLParser解析', page=55, price=37.5,

publishier=Publisher{pub='中国花花出版社'},

Author{name='author00'},

Author{name='author01'},

Author{name='author02'},

Author{name='author03'}]

}

XMLParser使用详解

首先介绍使用过程中用到的注解标签

标签名

注解对象

作用

属性

@XmlBean

JAVA类

表示一个XML的标签

name:要操作的XML标签名

@XmlAttribute

JAVA类成员基本数据类型和String属性

表示一个XML标签的属性

name:要操作标签的属性名

@XmlListNode

JAVA类集合成员属性

表示多个相同子标签的集合

name:要操作标签的子标签名称 nodetype:子标签对应的JAVA类

@XmlSingleNode

JAVA类成员对象属性

表示单个子标签

name:要操作标签的子标签名称 nodetype:子标签对应的JAVA类

@Ignore

JAVA类成员属性

表示忽略此属性,不去解析和生成

建模

介绍完上面的注解标签,下面开始实战:

首先建立一个根节点是User的XML文件

根据XML结构我们可以构建出对应的JAVA对象关系

/**

* 根据XML文件解析得来最外层User标签

*/

@XmlBean//标记为XML标签

public class User {

@XmlAttribute//标记为标签属性

public String name;

@XmlAttribute//标记为标签属性

public int age;

@XmlAttribute//标记为标签属性

public boolean marry;

@Ignore//忽略的标签属性

public boolean married = false;

@XmlSingleNode(name = "Books", nodeType = Books.class)//单个子节点 name=节点名字,nodeType=节点对应的JAVA类对象

public Books books;

@XmlListNode(name = "Phone", nodeType = Phone.class)//多个子节点

public List phones;

//getter 和 setter

}

@XmlBean

public class Books {

@XmlListNode(name = "Book",nodeType = Book.class)

public List books;

//getter 和 setter

}

@XmlBean

public class Book {

@XmlAttribute

public String name;

//getter 和 setter

}

@XmlBean

public class Phone {

@XmlAttribute(name = "number")//解析属性为number的标签属性

public String phoneNum;

@XmlAttribute

public String type;

//getter 和 setter

}

读取XML文件

建立好模型后,XMLParser有一个XMLAPI类,提供了XML解析生成的全部操作。非常简单,直接看代码:

@Test

public void testXML(){

//设置标签类(之前定义的User、Books等)的包路径

XMLAPI.changPackageName("lee.hua.databinding.xml_parse");

//调用XMLAPI.readXML()读取指定路径的XML文件

User userBean = (User) XMLAPI.readXML("/Users/lijie/Desktop/f.xml");

//打印user对象信息

System.out.println("XMLParser====="+ userBean);

}

输出:

XMLParser=====UserBean{name='test', age=18, marry=true, married=false,

books=Books{books=[Book{name='java'}, Book{name='android'}]},

phones=[Phone{phoneNum='110110110', type='home'},

Phone{phoneNum='221221221', type='company'}]}

分析:

我们可以发现Ignore和XmlAttribute的解析效果已经出来,User的属性married忽略解析,并且Phone的phoneNum属性也被成功赋值

生成XML文件

XML的生成相对更加简单,只需要调用XMLAPI.writeObj2Xml(Object object,String ouputPath),当然前提是:提前定义好XmlBean对象。

上代码:

@Test

public void testXML(){

//读取f.xml文件,文件内容就是上面定义的User

XMLAPI.changPackageName("lee.hua.databinding.xml_parse");

File file = new File("/Users/lijie/Desktop/f.xml");

User userBean = (User) XMLAPI.readXML(new FileInputStream(file));

System.out.println("XMLParser====="+ userBean);

//为解析出的对象新加一本书,名称为XMLParser,输出到f2.xml

userBean.books.getBooks().add(new Book("XMLParser"));

XMLAPI.writeObj2Xml(userBean,"/Users/lijie/Desktop/f2.xml");

}

结果:

分析:

根据XML文件内容可以发现,被Ignore标记的married没有输出,并且Phone中的phoneNum也是按照name="number"输出的。

总结

以上就是XMLParser的基本用法,本猿工作两年,能力有限,程序中还有很多需要优化修改,望各位多多支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值