java xmap_XML和Java Bean的互相转换攻略 【XMAP】

XML和Java Bean的互相转换攻略  XML和Java Bean互相转换是一个很有用的功能,因为两者有着前后合作的关系,但解析的过程比较痛苦。下面介绍如何进行XML和Java Bean的互相转换。

最近项目中用到了xml和java bean的转换

用到xml的时候我们需要遍历解析。。。然后将解析的值放入声明好的java bean,过程很痛苦,结果很美好

我们能不能直接从xml转化到java bean呢,或者直接成java bean转化到xml呢?

答案是OK的

使用jar包:org.nuxeo.common.xmap

写个小例子

XML

1.< ?xml version="1.0" encoding="UTF-8"?>

2.< books>

3.< book no="1">

4.< title>java是傻逼< /title>

5.< subject>java< /subject>

6.< subject>xml< /subject>

7.< price>10< /price>

8.< /book>

9.< book no="2">

10.< title>c++程序设计< /title>

11.< subject>C++< /subject>

12.< subject>c< /subject>

13.< price>10< /price>

14.< /book>

15.< /books>

Books类

16.import java.util.ArrayList;

17.import java.util.List;

18.

19.import org.nuxeo.common.xmap.annotation.XNodeList;

20.import org.nuxeo.common.xmap.annotation.XObject;

21.

22.@XObject(value = "books")

23.public class Books {

24. @XNodeList(value = "book", type = ArrayList.class, componentType = Book.class)

25. private List< Book> book;

26.

27. public List< Book> getBook() {

28. return book;

29. }

30.

31. public void setBook(List< Book> book) {

32. this.book = book;

33. }

34.

35. public void addBook(Book b){

36. if(book==null){

37. book=new ArrayList< Book>();

38. }

39. book.add(b);

40. }

41.}

42.

Book类

43.import java.util.ArrayList;

44.import java.util.List;

45.

46.import org.nuxeo.common.xmap.annotation.XNode;

47.import org.nuxeo.common.xmap.annotation.XNodeList;

48.import org.nuxeo.common.xmap.annotation.XObject;

49.

50.

51.@XObject

52.public class Book {

53. @XNode("title")

54. private String title;

55.

56. @XNode("@no")

57. private String no;

58.

59. @XNodeList(value = "subject", type = ArrayList.class, componentType = String.class)

60. private List< String> subjects;

61.

62. @XNode("price")

63. private int price;

64.

65. public String getTitle() {

66. return title;

67. }

68.

69. public void setTitle(String title) {

70. this.title = title;

71. }

72.

73. public List< String> getSubjects() {

74. return subjects;

75. }

76.

77. public void setSubjects(List< String> subjects) {

78. this.subjects = subjects;

79. }

80.

81. public int getPrice() {

82. return price;

83. }

84.

85. public void setPrice(int price) {

86. this.price = price;

87. }

88.

89. public String getNo() {

90. return no;

91. }

92.

93. public void setNo(String no) {

94. this.no = no;

95. }

96.}

97.

测试类:

98.import java.util.ArrayList;

99.import java.util.List;

100.

101.import org.nuxeo.common.xmap.XMap;

102.

103.

104.public class XmapTest {

105. public static void main(String[] args) {

106. try {

107. //声明一组书的根节点

108. Books books=new Books();

109.

110. //声明一本书

111. Book book=new Book();

112. //书的类型

113. List< String> sj=new ArrayList< String>();

114. sj.add("java");

115. sj.add("xml");

116. //设置书节点的属性

117. book.setPrice(10);

118. book.setTitle("java是傻逼");

119. book.setSubjects(sj);

120. book.setNo("1");

121.

122. //将书节点添加到跟节点

123. books.addBook(book);

124.

125. //声明一本书

126. Book book2=new Book();

127. //书的类型

128. List< String> sj2=new ArrayList< String>();

129. sj2.add("C++");

130. sj2.add("c");

131. //设置书节点的属性

132. book2.setPrice(10);

133. book2.setTitle("c++程序设计");

134. book2.setSubjects(sj2);

135. book2.setNo("2");

136.

137. //将书节点添加到跟节点

138. books.addBook(book2);

139.

140. XMap xmp = new XMap();

141. xmp.register(Books.class);

142.

143. List< String> filters = new ArrayList< String>();

144.

145. System.out.println(xmp.asXmlString(books, "UTF-8", filters, true));

146. } catch (Exception e) {

147. e.printStackTrace();

148. }

149. }

150.}

151.

运行上面这个类就可以生成开头所看见的那个XML的内容

解析xml

152.xmap.register(Books.class);

153. URL url = new File("book.xml").toURL();

154. InputStream in = new FileInputStream(new File("book.xml"));

155. Object[] result = (Object[]) xmap.loadAll(in);

156.

157.Books books=(Books)result[0];

158.

数据就完全autowire by name进入到了bean,某些情况下很好用(xml很整齐,每个节点的内容都一样,固定)

XML和Java Bean互相转换就此实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值