Java 使用JAXB时嵌套编组&;包含元素列表的XML注释

Java 使用JAXB时嵌套编组&;包含元素列表的XML注释,java,xml,jaxb,marshalling,unmarshalling,Java,Xml,Jaxb,Marshalling,Unmarshalling,你们中的许多人都可以帮助我回答这个问题。我对stackoverflow做了很多问题的回答,但在某种程度上,我编写的代码似乎没有按照我希望的方式工作 任何帮助都将不胜感激 我也看到了这篇优秀的文章,它向我解释了很多事情 我尝试实现它,但没有得到所需的xml格式。任何帮助都将不胜感激。 多谢各位 下面是我发布的代码: 我的课程中有两门课: 前一个类通过调用Identity类中的get/set方法来设置值 :Identity.java: @XmlRootElement(name="LabbuddyA

你们中的许多人都可以帮助我回答这个问题。我对stackoverflow做了很多问题的回答,但在某种程度上,我编写的代码似乎没有按照我希望的方式工作

任何帮助都将不胜感激

我也看到了这篇优秀的文章,它向我解释了很多事情

我尝试实现它,但没有得到所需的xml格式。任何帮助都将不胜感激。 多谢各位

下面是我发布的代码:

我的课程中有两门课: 前一个类通过调用Identity类中的get/set方法来设置值

:Identity.java:

 @XmlRootElement(name="LabbuddyArray")
 public class Identity {


 public String toString() 
  {
        return "DSC_XML_OUTPUT [Company_name=" + company_name + ",       Model_Number=" + model_number + ", Serial_Number=" + serial_number + ",  New_BIAS=" + new_bias +", New_TEMP=" + new_temp + "]";
 }


//DECLARE VARIABLES
String company_name;
String model_number;
String serial_number;
String port_number;
float photo_current;
float actual_bias;
float new_bias;
float actual_temp;
float new_temp;
List<String> slots;

public Identity(){}
//DECLARING CLASSES FOR XML FORMATTING

//GETTING AND SETTING SLOTS TO XML

@XmlElementWrapper
@XmlElement(name="slot")
public List<String> getSlots (){
    return slots;
}

public void setSlots (List<String> slots){
    this.slots = slots;
}


public String getIdentityCompanyName() {
    return company_name;
}

@XmlElement(name="setIdentityCompanyName")
public void setIdentityCompanyName(String identity_company_name) {
    this.company_name = identity_company_name;
}

//GETTING AND SETTING MODEL_NUMBER TO XML

public String getIdentityModelNumber() {
    return model_number;
}

@XmlElement(name="setIdentityModelNumber")
public void setIdentityModelNumber(String model_number) {
    this.model_number = model_number;
}



//GETTING AND SETTING SERIAL_NUMBER TO XML

public String getIdentitySerialNumber() {
    return serial_number;
}

@XmlElement(name="setIdentitySerialNumber")
public void setIdentitySerialNumber(String serial_number) {
    this.serial_number = serial_number;
}



//GETTING AND SETTING PORT_NUMBER TO XML

public String getIdentityPortNumber() {
    return port_number;
}

@XmlElement (name="setIdentityPortNumber")
public void setIdentityPortNumber(String port_number) {
    this.port_number = port_number;
}

//GETTING AND SETTING PHOTOCURRENT TO XML


public float getMonitorPhotoCurrent() {
    return photo_current;
}

@XmlElement(name="setMonitorPhotoCurrent")
public void setMonitorPhotoCurrent(float photo_current) {
    this.photo_current = photo_current;
}

//GETTING AND SETTING BIAS TO XML

//ACTUAL BIAS (READ)
public float getControlActualBias() {
    return actual_bias;
}

@XmlElement (name="setControlActualBias")
public void setControlActualBias(float actual_bias) {
    this.actual_bias = actual_bias;
}

//NEW BIAS (WRITE)
public float getControlNewBias(){
        return new_bias;
}

@XmlElement (name="setControlNewBias")
public void setControlNewBias(float new_bias){
     this.new_bias = new_bias;
}


//GETTING AND SETTING TEMP TO XML

//ACTUAL TEMP (READ)
public float getControlActualTemp() {
    return actual_temp;
}

@XmlElement (name="setControlActualTemp")
public void setControlActualTemp(float actual_temp) {
    this.actual_temp = actual_temp;
}

//NEW TEMP (WRITE)
public float getControlNewTemp(){
        return new_temp;
}

@XmlElement(name ="setControlNewTemp")
public void setControlNewTemp(float new_temp){
     this.new_temp = new_temp;
}
@XmlRootElement(name=“LabbuddyArray”)
公共阶级身份{
公共字符串toString()
{
返回“DSC_XML_输出[Company_name=“+Company_name+”,Model_Number=“+Model_Number+”,Serial_Number=“+Serial_Number+”,New_BIAS=“+New_BIAS+”,New_TEMP=“+New_TEMP+””;
}
//声明变量
字符串公司名称;
字符串型号;
字符串序列号;
字符串端口号;
浮动光电流;
浮动实际偏差;
浮动新的偏差;
浮动实际温度;
浮动新温度;
列出时段;
公共标识(){}
//为XML格式声明类
//获取插槽并将其设置为XML
@XmlElementWrapper
@xmlement(name=“slot”)
公共列表getSlots(){
返回槽;
}
公共无效设置批次(列出插槽){
这个。插槽=插槽;
}
公共字符串getIdentityCompanyName(){
返回公司名称;
}
@XmlElement(name=“setIdentityCompanyName”)
public void setIdentityCompanyName(字符串标识\公司\名称){
this.company\u name=identity\u company\u name;
}
//获取MODEL_编号并将其设置为XML
公共字符串getIdentityModelNumber(){
返回型号;
}
@XmlElement(name=“setIdentityModelNumber”)
public void setIdentityModelNumber(字符串型号){
this.model_number=model_number;
}
//获取序列号并将其设置为XML
公共字符串getIdentitySerialNumber(){
返回序列号;
}
@XmlElement(name=“setIdentitySerialNumber”)
public void setIdentitySerialNumber(字符串序列号){
这个。序列号=序列号;
}
//获取端口号并将其设置为XML
公共字符串getIdentityPortNumber(){
返回端口号;
}
@XmlElement(name=“setIdentityPortNumber”)
public void setIdentityPortNumber(字符串端口号){
this.port\u number=端口号;
}
//获取并将光电流设置为XML
公共浮点数getMonitorPhotoCurrent(){
返回当前照片;
}
@XmlElement(name=“setMonitorPhotoCurrent”)
公共无效设置监视器光电流(浮动光电流){
this.photo_current=photo_current;
}
//获取和设置XML的偏差
//实际偏差(读取)
公共浮动getControlActualBias(){
返回实际偏差;
}
@XmlElement(name=“setControlActualBias”)
公共无效设置控制实际偏差(浮动实际偏差){
this.actual_bias=实际_bias;
}
//新偏差(写入)
公共浮动getControlNewBias(){
返回新的_偏差;
}
@XmlElement(name=“setControlNewBias”)
公共无效setControlNewBias(浮动新偏差){
this.new_bias=new_bias;
}
//获取并设置TEMP为XML
//实际温度(读取)
公共浮点getControlActualTemp(){
返回实际温度;
}
@XmlElement(name=“setControlActualTemp”)
公共无效设置控制实际温度(浮动实际温度){
this.actual_temp=实际_temp;
}
//新临时(写入)
公共浮点getControlNewTemp(){
返回新的温度;
}
@XmlElement(name=“setControlNewTemp”)
公共无效setControlNewTemp(浮动新温度){
this.new_temp=new_temp;
}
}

:DSC.java:

 public class Dsc {

public static void main(String[] args) throws InterruptedException {

    //INITIALIZING SCANNER TO TAKE INPUTS
    Scanner input = new Scanner(System.in);

    //CALLING ALL FUNCTIONS
    Identity identity = new Identity();

    List<String> strings = new ArrayList<String>(2);
    strings.add("1");
    identity.setSlots(strings);


    //CREATING SERIAL PORT OBJECT
    SerialPort serialPort = new SerialPort("COM4");

    //GETTING SERIALPORTS
    String[] portNames = SerialPortList.getPortNames();
    for(int i = 0; i < portNames.length; i++)
    {
        System.out.println("Port Available on this machine: " +portNames[i]);
    }
    identity.setIdentityPortNumber("COM4");


    //STARTING TRY BLOCK TO CATCH ERRORS THROUGHOUT THE EXECUTION

    try 
    { 

    //OPENING PORT AND ASSIGNING PARAMETERS FOR COMMUNICATION    
        System.out.println("Port opened: " + serialPort.openPort());
        System.out.println("Params setted: " + serialPort.setParams(57600, 8, 1, 0));
        System.out.println("--------------------------------------------------------");


    //IDENTIFYING THE COMPANY NAME ; MODEL NUMBER ; SERIAL NUMBER ; PORT NUMBER    
        System.out.println("Passing *IDN? to identify the Device: " +serialPort.writeString("*IDN? \n"));
        Thread.sleep(500);
        String str = serialPort.readString();
        System.out.println("The Device ID is: " +str);
        String[] deviceid = str.split(",");
        System.out.println("Company :" + deviceid[0]);
        identity.setIdentityCompanyName(deviceid[0]);
        System.out.println("Model Number :" + deviceid[1]);
        identity.setIdentityModelNumber(deviceid[1]);
        System.out.println("Serial Number :" + deviceid[2]);
        identity.setIdentitySerialNumber(deviceid[2]);

        System.out.println("--------------------------------------------------------");

     //IDENTIFYING THE PHOTOCURRENT
        System.out.println("Passing MEAS:IDC? to identify the Photocurrent: " +serialPort.writeString("MEAS:IDC? \n"));
        Thread.sleep(500);
        String str1 = serialPort.readString();
        System.out.println("The Photocurrent is :" +str1);
        float photoCurrent = Float.parseFloat(str1);
        identity.setMonitorPhotoCurrent(photoCurrent);
        System.out.println("--------------------------------------------------------");


       //IDENTIFYING THE ACTUAL BIAS
        System.out.println("Passing MEAS:BIAS? to identify the Actual BIAS: " +serialPort.writeString("MEAS:BIAS? \n"));
        Thread.sleep(500);
        String str2 = serialPort.readString();
        System.out.println("The Actual BIAS is :" +str2);
        float control_actualBias = Float.parseFloat(str2);
        identity.setControlActualBias(control_actualBias);
        System.out.println("--------------------------------------------------------"); 

        //SETTING THE BIAS
         System.out.println("Set the Bias to ?");
         float setBias = input.nextFloat();
         System.out.println("Setting the user input BIAS to " +setBias +": " +serialPort.writeString("INP:BIAS " +setBias +"\n" ));
         Thread.sleep(500);
         identity.setControlNewBias(setBias);
         System.out.println("--------------------------------------------------------"); 

        //IDENTIFYING THE ACTUAL TEMPERATURE
        System.out.println("Passing MEAS:TEMP? to identify the Temperature: " +serialPort.writeString("MEAS:TEMP? \n"));
        Thread.sleep(500);
        String str3 = serialPort.readString();
        System.out.println("The Actual TEMP is: " +str3);
        float actualTemp = Float.parseFloat(str3);
        identity.setControlActualTemp(actualTemp);
        System.out.println("--------------------------------------------------------"); 

        //SETTING THE TEMPERATURE
         System.out.println("Set the new TEMP to ?");
         float setTemp = input.nextFloat();
         System.out.println("Setting the user input TEMP to " +setTemp +": "  +serialPort.writeString("INP:TEMP " +setTemp +"\n" ));
         Thread.sleep(500);
         identity.setControlNewTemp(setTemp);
         System.out.println("--------------------------------------------------------"); 


    }
    catch (SerialPortException ex)
    {
        System.out.println(ex);
    }

    //STARTING THE JAXBCONTEXT & JAXBMARSHALLER CODE TO WRITE OUTPUT IN XML FILE

    try 
    {
        File file = new File("C:\\xampp\\htdocs\\StateMachine.xml");
    JAXBContext jaxbContext = JAXBContext.newInstance(Identity.class);
            Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,  true);
            jaxbMarshaller.marshal(identity, file);
    jaxbMarshaller.marshal(identity, System.out);

    }
    catch (JAXBException e)
    {
        e.printStackTrace();
    }

}
公共类Dsc{
公共静态void main(字符串[]args)引发InterruptedException{
//初始化扫描仪以获取输入
扫描仪输入=新扫描仪(System.in);
//调用所有函数
标识标识=新标识();
列表字符串=新的ArrayList(2);
字符串。添加(“1”);
identity.setslot(字符串);
//创建串行端口对象
SerialPort SerialPort=新的SerialPort(“COM4”);
//获取串行端口
String[]portNames=SerialPortList.getPortNames();
for(int i=0;i :::::::: Current XML output :::::::: 
<LabbuddyArray>
<setControlActualBias>5.999</setControlActualBias>
<setControlActualTemp>21.9</setControlActualTemp>
<setControlNewBias>5.0</setControlNewBias>
<setControlNewTemp>23.0</setControlNewTemp>
<setIdentityCompanyName>DSC</setIdentityCompanyName>
<setIdentityModelNumber>HLPD Lab Buddy</setIdentityModelNumber>
<setIdentityPortNumber>COM4</setIdentityPortNumber>
<setIdentitySerialNumber>50311602</setIdentitySerialNumber>
<setMonitorPhotoCurrent>0.0</setMonitorPhotoCurrent>
<slots>
    <slot>1</slot>
</slots>
</LabbuddyArray>



::::::Required XML OUTPUT::::::


<LabbuddyArray>
<slot1>
    <setControlActualBias></setControlActualBias>
    <setControlActualTemp></setControlActualTemp>
    <setControlNewBias></setControlNewBias>
    <setControlNewTemp></setControlNewTemp>
    <setIdentityCompanyName></setIdentityCompanyName>
    <setIdentityModelNumber></setIdentityModelNumber>
    <setIdentityPortNumber></setIdentityPortNumber>
    <setIdentitySerialNumber></setIdentitySerialNumber>
    <setMonitorPhotoCurrent></setMonitorPhotoCurrent>

</slot1>
<slot2>
    <setControlActualBias></setControlActualBias>
    <setControlActualTemp></setControlActualTemp>
    <setControlNewBias></setControlNewBias>
    <setControlNewTemp></setControlNewTemp>
    <setIdentityCompanyName></setIdentityCompanyName>
    <setIdentityModelNumber></setIdentityModelNumber>
    <setIdentityPortNumber></setIdentityPortNumber>
    <setIdentitySerialNumber></setIdentitySerialNumber>
    <setMonitorPhotoCurrent></setMonitorPhotoCurrent>
 </slot2>
</LabbuddyArray>
@XmlRootElement(name="LabbuddyArray")
public class Identity {
    List<Slots> slots;

    @XmlElement(name="slot")
    public List<Slots> getSlots() {
        return slots;
    }

    public void setSlots(List<Slots> slots) {
        this.slots = slots;
    }

}
Identity identity = new Identity();
List<Slots> slots = new ArrayList<Slots>();

Slots slot = new Slots();
slot.setControlActualBias(Float.valueOf("1.23"));
slots.add(slot);

slot = new Slots();
slot.setControlActualBias(Float.valueOf("1.24"));
slots.add(slot);


identity.setSlots(slots);
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LabbuddyArray>
    <slot>
        <setControlActualBias>1.23</setControlActualBias>
        <setControlActualTemp>0.0</setControlActualTemp>
        <setControlNewBias>0.0</setControlNewBias>
        <setControlNewTemp>0.0</setControlNewTemp>
        <setMonitorPhotoCurrent>0.0</setMonitorPhotoCurrent>
    </slot>
    <slot>
        <setControlActualBias>1.24</setControlActualBias>
        <setControlActualTemp>0.0</setControlActualTemp>
        <setControlNewBias>0.0</setControlNewBias>
        <setControlNewTemp>0.0</setControlNewTemp>
        <setMonitorPhotoCurrent>0.0</setMonitorPhotoCurrent>
    </slot>
</LabbuddyArray>