使用JAXBContext 设置xml节点属性

JAXBContext 设置xml节点属性

在使用JAXBContext将javaBean转化为xml时

会出现这样的需求:

<xml version="2.0">
    ....
</xml>

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

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

@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文件大致为:

<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,若不加此注解,该元素将被映射为

    <items>...</items>
    <items>...</items>

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

    @XmlElementWrapper(name="items")
    @XmlElement(name="item")
    public List items;

将会生成这样的XML样式:

    <items>
        <item>...</item>
        <item>...</item>
    </items>

Demo如下:

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

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集合的实体类):

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;
 }
}

测试方法:

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();
  }
 }

}

输出:

<?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>

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

(0)

相关推荐

  • java对xml节点属性的增删改查实现方法

    学习本文之前请先看我的另一篇文章JAVA对XML节点的操作可以对XML操作有更好的了解. package vastsum; import java.io.File; import java.io.FileWriter; import java.util.Iterator; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; i

  • XML文件修改节点属性值(多种方法)

    xml 文件内容: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <subtitles> <info> <content>最新通告:五一放假七天!请各教员悉知</content> <speed>4</speed> <color>red</color> </info> </subtitles

  • java使用jaxb操作xml示例

    首先定义两个示例类ClassA,ClassB,用于后续的示例演示 复制代码 代码如下: package cn.lzrabbit; public class ClassA {     private int classAId;     private String classAName; private ClassB classB; public int getClassAId() {         return classAId;     } public void setClassAId(i

  • 使用JAXBContext 设置xml节点属性

    JAXBContext 设置xml节点属性 在使用JAXBContext将javaBean转化为xml时 会出现这样的需求: <xml version="2.0"> .... </xml> 那么xml节点里的属性值version需要怎么设置 使用@XmlAttribute标签即可,如下代码. @XmlRootElement(name = "Xml") @XmlAccessorType(XmlAccessType.FIELD) public c

  • C#通过XML节点属性/属性值读取写入XML操作代码实例

    1.XML的内容如下: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8" ?><root>  <title>    <settings id = "0" name = "显示文字">欢迎您!智慧服务,互动体验......</settings>    <settings id = "1" name

  • jQuery实现遍历XML节点和属性的方法示例

    本文实例讲述了jQuery实现遍历XML节点和属性的方法.分享给大家供大家参考,具体如下: 用jquery遍历xml网上已经有很多, 但是看了好多文章, 对于不指定属性名称的遍历方法却没有 研究了一下, 好像jquery没有attributes. 还是要借助于原生态的JS 以下是JS代码 <script type="text/javascript" src="js/jquery.min.js"></script> <div id=&qu

  • Python练习之读取XML节点和属性值的方法

    面试题 有一个test.xml文件,要求读取该文件中products节点的所有子节点的值以及子节点的属性值. test.xml文件: <!-- products.xml --> <root> <products> <product uuid='1234'> <id>10000</id> <name>苹果</name> <price>99999</price> </product&g

  • C#读取xml节点数据方法小结

    本文实例总结了C#读取xml节点数据的方法.分享给大家供大家参考.具体如下: 第一种: 使用XPath XML的路径我配置在web.config 的appSettings节点下 <appSettings> <add key="orgCodePath" value="../../template/home/orgCode.xml"/> </appSettings> XML结构如下: <?xml version="1.

  • php 修改、增加xml结点属性的实现代码

    php 修改 增加xml结点属性的代码,供大家学习参考.php修改xml结点属性,增加xml结点属性的代码,有需要的朋友,参考下. 1.xml文件 复制代码 代码如下: <?xml version="1.0" encoding="UTF-8" ?><clientSet><server url="192.168.0.180" port="1935" /><rootPath value=&

  • Javascript入门学习第八篇 js dom节点属性说明第1/2页

    今天我们讲DOM属性. 前面其实我们已经碰过DOM属性了. 比如: nodeName,nodeType-..今天我们详细的讲解下. 1,nodeName属性  : 节点的名字. 如果节点是元素节点,那么返回这个元素的名字.此时,相当于tagName属性. 比如: <p>aaaa</p>  : 则返回 p ; 如果是属性节点,nodeName将返回这个属性的名字. 如果是文本节点,nodeName将返回一个#text的字符串. 另外我要说的是: nodeName属性是一个只读属性,不

  • DOM下的节点属性和操作小结

    属性: 1 .nodeName 节点名称,相当于tagName.属性节点返回属性名,文本节点返回#text.nodeName,是只读的. 2 .nodeType 值:1,元素节点:2,属性节点:3,文本节点.nodeType是只读的. 3 .nodeValue 返回一个字符串,指示这个节点的值.元素节点返回null,属性节点返回属性值,文本节点返回文本.nodeValue可读可写,这是对元素节点不能写.一般只用于设置文本节点的值. 4 .childNodes 返回子节点数组.文本和属性节点的ch

  • 小程序中使用css var变量(使js可以动态设置css样式属性)

    使用sass,stylus可以很方便的使用变量来做样式设计,其实css也同样可以定义变量,在小程序中由于原生不支持动态css语法,so,可以使用css变量来使用开发工作变简单. 基本用法 基础用法 <!--web开发中顶层变量的key名是:root,小程序使用page--> page { --main-bg-color: brown; } .one { color: white; background-color: var(--main-bg-color); margin: 10px; } .

随机推荐