gpt4 book ai didi

使用JAXBContext 设置xml节点属性

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章使用JAXBContext 设置xml节点属性由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

JAXBContext 设置xml节点属性

在使用JAXBContext将javaBean转化为xml时

会出现这样的需求:

?
1
2
3
< xml version = "2.0" >
     ....
</ xml >

那么xml节点里的属性值version需要怎么设置

使用@XmlAttribute标签即可,如下代码.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@XmlRootElement (name = "Xml" )
@XmlAccessorType (XmlAccessType.FIELD)
public class RequestBean{
 
     @XmlAttribute (name = "version" ) //设置节点属性
     private String version;
     private Body body;        
     @XmlElement (name = "sign" //设置子节点
     private String sign;
     //省略封装
}
 
@XmlRootElement (name = "Body" )
@XmlAccessorType (XmlAccessType.FIELD)
public class Body{
     ...
}

最终得到的xml文件大致为:

?
1
2
3
4
5
6
7
8
9
< Xml version = "2.0" >
     < sign >111111</ sign >
     < Body >
  < Amount >111</ Amount >
  < Fee >fee</ Fee >
  < PayerName >payname</ PayerName >
  < AccountType >accountType</ AccountType >
     </ Body >
</ Xml >

JAXBContext解析XML集合对象

@XmlElementWrapper 为数组元素或集合元素定义一个父节点.

如,类中有一元素为List items,若不加此注解,该元素将被映射为 。

?
1
2
< items >...</ items >
< items >...</ items >

这种形式,此注解可将这个元素进行包装,如:

?
1
2
3
@XmlElementWrapper (name= "items" )
@XmlElement (name= "item" )
public List items;

将会生成这样的XML样式:

?
1
2
3
4
< items >
     < item >...</ item >
     < item >...</ item >
</ items >

Demo如下:

实体类一(定义一个被包含的子项Item):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package org.ywzn.po;
import javax.xml.bind.annotation.XmlAttribute;
public class Item {
  private String infoType;
  private String nodeId;
  private String resultCode;
  private String resultString;
  public Item() {
   super ();
  }
 
  public Item(String infoType, String nodeId, String resultCode,
    String resultString) {
   super ();
   this .infoType = infoType;
   this .nodeId = nodeId;
   this .resultCode = resultCode;
   this .resultString = resultString;
  }
 
  @XmlAttribute (name = "InfoType" )
  public String getInfoType() {
   return infoType;
  }
 
  public void setInfoType(String infoType) {
   this .infoType = infoType;
  }
 
  public String getNodeId() {
   return nodeId;
  }
 
  public void setNodeId(String nodeId) {
   this .nodeId = nodeId;
  }
 
  public String getResultCode() {
   return resultCode;
  }
 
  public void setResultCode(String resultCode) {
   this .resultCode = resultCode;
  }
 
  public String getResultString() {
   return resultString;
  }
 
  public void setResultString(String resultString) {
   this .resultString = resultString;
  }
}

实体类二(定义一个有List集合的实体类):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package org.ywzn.po;
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement
public class Message {
  private String version;
  private Head head;
  private List<Item> items;
  @XmlAttribute (name= "version" )
  public String getVersion() {
   return version;
  }
 
  public void setVersion(String version) {
   this .version = version;
  }
 
  @XmlElement (name= "Head" )
  public Head getHead() {
   return head;
  }
 
  public void setHead(Head head) {
   this .head = head;
  }
 
  public List<Item> getItems() {
   return items;
  }
 
  @XmlElementWrapper (name= "Items" )
  @XmlElement (name= "Item" )
  public void setItems(List<Item> items) {
   this .items = items;
 
}

测试方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package org.ywzn.main;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import org.ywzn.po.Head;
import org.ywzn.po.Item;
import org.ywzn.po.Message;
import org.ywzn.po.Parameters;
import org.ywzn.po.Room;
 
public class Java2XMLMany {
  public static void main(String[] args) {
   // <?xml version='1.0' encoding='UTF-8' standalone='no' ?> <Message
   // version='1.0'><Header Time='2015-05-22 10:34:27' MessageType='LOGIN'
   // BusinessId='B730EB39-CEFF-4a38-B633-D8936EB8AEF7' SessionId='936'
   // /><Parameters> <items Sum='1' Offset='1' Cur='1'> <item
   // Infotype='LogUser'> <PassWord
   // >D41D8CD98F00B204E9800998ECF8427E</PassWord></item> </items>
   // </Parameters> </Message>
 
   // TODO Auto-generated method stub
   Item item = new Item( "LOGIN" , "789" , "xxx" , "xxx" );
   List<Item> list = new ArrayList<Item>();
   list.add(item);
   Head head = new Head( "2015-05-21 16:46:14" , "LOGIN" , "8D24CE2B-5" );
   Parameters parameters = new Parameters(list);
   // Message message = new Message(head,"1.0",parameters);
   Message message = new Message();
   message.setVersion( "1.0" );
   message.setHead(head);
   message.setItems(list);
   try {
    JAXBContext context = JAXBContext.newInstance(Message. class );
    Marshaller createMarshaller = context.createMarshaller();
    createMarshaller
      .setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true ); // 是否格式化生成的xml串
 
    createMarshaller.marshal(message, System.out);
   } catch (JAXBException e) {
    e.printStackTrace();
   }
  }
 
}

输出:

?
1
2
3
4
5
6
7
8
9
10
11
<? xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
< message version = "1.0" >
     < Head businessId = "8D24CE2B-5" MessageType = "LOGIN" Time = "2015-05-21 16:46:14" />
     < Items >
         < Item InfoType = "LOGIN" >
             < nodeId >789</ nodeId >
             < resultCode >xxx</ resultCode >
             < resultString >xxx</ resultString >
         </ Item >
     </ Items >
</ message >

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/Dawn_Bells/article/details/81908275 。

最后此篇关于使用JAXBContext 设置xml节点属性的文章就讲到这里了,如果你想了解更多关于使用JAXBContext 设置xml节点属性的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com