有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何将两个java对象合并到一个xml文件中?

这是我的节目。合并两个对象是否正确

public class ObjectToXml {  
public static void main(String[] args) throws Exception{  
JAXBContext contextObj = JAXBContext.newInstance(Employee.class);  

Marshaller marshallerObj = contextObj.createMarshaller();  
marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  
try{
  Employee employees = new Employee();
  employees.setEmployee(new ArrayList<Employee>());

  Employee emp1=new Employee(1,"Vimal Jaiswal",50000);  
  Employee emp2=new Employee(2,"Kamal",40000);

  employees.getEmployee().add(emp1);
  employees.getEmployee().add(emp2);
  marshallerObj.marshal(employees, new FileOutputStream("E:\\employee.xml"));  

  }
    catch(JAXBException e){
  System.out.println(e);
 }}}

它的输出像双倍:

1,"Vimal Jaiswal",50000 
2,"Kamal",40000
1,"Vimal Jaiswal",50000 
2,"Kamal",40000

共 (4) 个答案

  1. # 1 楼答案

    请找到下面的代码来解决您的问题

    package com.mss.sample;
    
    import javax.xml.bind.annotation.XmlElement;
    
    /**
     * Employee Model class
     * 
     * @author Anilkumar Bathula
     */
    
    
    public class Employee {
    
        // Fields
        int empId;
        String empName;
        int empSal;
    
        public Employee(int empId, String empName, int empSal) {
            super();
            this.empId = empId;
            this.empName = empName;
            this.empSal = empSal;
        }
    
        @XmlElement
        public int getEmpId() {
            return empId;
        }
    
        public void setEmpId(int empId) {
            this.empId = empId;
        }
    
        @XmlElement
        public String getEmpName() {
            return empName;
        }
    
        public void setEmpName(String empName) {
            this.empName = empName;
        }
    
        @XmlElement
        public int getEmpSal() {
            return empSal;
        }
    
        public void setEmpSal(int empSal) {
            this.empSal = empSal;
        }
    
    }
    

    序列化类:

    package com.mss.sample;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    
    /**
     * Employees class
     * 
     * @author Anilkumar Bathula
     */
    
    @XmlRootElement
    public class Employees {
        private List<Employee> employees;
    
        public Employees() {
            employees = new ArrayList<Employee>();
        }
    
        @XmlElement
        public List<Employee> getEmployees() {
            return employees;
        }
    
        public void setEmployees(List<Employee> employees) {
            this.employees = employees;
        }
    }
    

    main生成XML的类:

    package com.mss.sample;
    
    import java.io.FileOutputStream;
    
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Marshaller;
    import com.mss.sample.Employees;
    
    /**
     * Marshal class
     * 
     * @author Anilkumar Bathula
     */
    
    public class Marshal {
    
        public static void main(String[] args) throws Exception {
    
            JAXBContext contextObj = JAXBContext.newInstance(Employees.class);
    
            Marshaller marshallerObj = contextObj.createMarshaller();
            marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            try {
    
                Employees employees = new Employees();
                Employee emp1 = new Employee(1, "Vimal Jaiswal", 50000);
                Employee emp2 = new Employee(2, "Kamal", 40000);
    
                employees.getEmployees().add(emp1);
                employees.getEmployees().add(emp2);
                marshallerObj.marshal(employees, new FileOutputStream(
                        "D:\\employee.xml"));
    
            } catch (JAXBException e) {
                System.out.println(e);
            }
        }
    }
    
  2. # 2 楼答案

    没有Employee类的实现和注释,很难给出准确的答案

    因此,我写了一个小例子,这是高度相关的你。我希望这会有所帮助:)

    提示:重要的部分是编写XML注释

    梅因。阶级

    import java.io.FileOutputStream;
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Marshaller;
    
    public class Main {
        public static void main(String[] args) throws Exception {
            JAXBContext contextObj = JAXBContext.newInstance(Employees.class);
    
            Marshaller marshallerObj = contextObj.createMarshaller();
            marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            try {
                Employees employees = new Employees();
                Employee emp1 = new Employee(1, "Vimal Jaiswal", 50000);
                Employee emp2 = new Employee(2, "Kamal", 40000);
    
                employees.getEmployees().add(emp1);
                employees.getEmployees().add(emp2);
                marshallerObj.marshal(employees, new FileOutputStream(
                        "W:\\employee.xml"));
    
            } catch (JAXBException e) {
                e.printStackTrace();
            }
        }
    }
    

    员工。阶级

    import java.util.ArrayList;
    import java.util.List;
    
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement
    public class Employees {
        private List<Employee> employees;
    
        public Employees() {
            employees = new ArrayList<Employee>();
        }
    
        @XmlElement
        public List<Employee> getEmployees() {
            return employees;
        }
    
        public void setEmployees(List<Employee> employees) {
            this.employees = employees;
        }
    }
    

    雇员。阶级

    import javax.xml.bind.annotation.XmlElement;
    
    public class Employee {
        private int id;
        private String name;
        private int salary;
    
        public Employee(int id, String name, int salary) {
            this.id = id;
            this.name = name;
            this.salary = salary;
        }
    
        @XmlElement
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        @XmlElement
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @XmlElement
        public int getSalary() {
            return salary;
        }
    
        public void setSalary(int salary) {
            this.salary = salary;
        }
    }
    

    生成的XML:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <employees>
        <employees>
            <id>1</id>
            <name>Vimal Jaiswal</name>
            <salary>50000</salary>
        </employees>
        <employees>
            <id>2</id>
            <name>Kamal</name>
            <salary>40000</salary>
        </employees>
    </employees>
    
  3. # 3 楼答案

    创建一个包含Employee对象列表的类

    public class EmployeeList {
    
    private List<Employee> list;
    
    public EmployeeList(){
        list = new ArrayList<Employee>();
    }
    
    public void add(Employee e){
        list.add(e);
    }
    

    }

    然后将其序列化

    XStream xstream = new XStream();
    xstream.alias("employee", Employee.class);
    xstream.alias("employees", EmployeeList.class);
    xstream.addImplicitCollection(EmployeeList.class, "list");
    
    EmployeeList list = new EmployeeList();
    list.add(new Employee(1,"Vimal Jaiswal",50000));
    list.add(new Employee(2,"Kamal",40000));
    
    String xml = xstream.toXML(list);
    

    我希望这会有所帮助

  4. # 4 楼答案

    您应该使用try with resources关闭FileStream对象:

    try(FileOutputStream os = new FileOutputStream("c:\\temp\\employee.xml")){
     ...
    
     marshallerObj.marshal(employees, os);  
    
    }