gpt4 book ai didi

java - 反序列化 XML 文件而不转换 xml 文件

转载 作者:太空宇宙 更新时间:2023-11-04 14:26:34 24 4
gpt4 key购买 nike

下面的 xml 是由系统生成的,需要由 Java 应用程序将其转换为 Employee 类型的对象。

<?xml version="1.0" encoding="utf-8"?>
<Employee xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Designation>Executive</Designation>
<Name>Praveen Kumar</Name>
<Salary>90000</Salary>
<BankAccount>10111</BankAccount>
</Employee>

如何使用 XmlDecoder 的 readObject 方法反序列化上述 XML,而不转换由另一个系统生成的 xml 文件?

最佳答案

以下是处理您的用例的方法:

Java 模型

以下类将用于此答案:

package forum26609152;

public class Employee {

private String designation;
private String name;
private int salary;
private String bankAccount;

public String getDesignation() {
return designation;
}

public void setDesignation(String designation) {
this.designation = designation;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getSalary() {
return salary;
}

public void setSalary(int salary) {
this.salary = salary;
}

public String getBankAccount() {
return bankAccount;
}

public void setBankAccount(String bankAccount) {
this.bankAccount = bankAccount;
}

}

XML编码器/XML解码器

下面是 XMLEncoder/XMLDecoder 期望使用的 XML。它与您问题中的 XML 有很大不同。 XMLEncoder/XMLDecoder 不太适合您的用例。

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_60" class="java.beans.XMLDecoder">
<object class="forum26609152.Employee">
<void property="bankAccount">
<string>10111</string>
</void>
<void property="designation">
<string>Executive</string>
</void>
<void property="name">
<string>Praveen Kumar</string>
</void>
<void property="salary">
<int>90000</int>
</void>
</object>
</java>

JAXB

JAXB 是用于对象到 XML 绑定(bind)的标准 API。自 Java SE 6 起,JDK/JRE 中就包含了一个实现,因此您已经拥有它了。

员工

Java 和 XML 之间的映射是通过注释配置的。以下是将 Java 对象映射到问题中的 XML 所需的注释。

import javax.xml.bind.annotation.*;

@XmlRootElement(name="Employee")
@XmlType(propOrder = {"designation", "name", "salary", "bankAccount"})
public class Employee {

private String designation;
private String name;
private int salary;
private String bankAccount;

@XmlElement(name="Designation")
public String getDesignation() {
return designation;
}

public void setDesignation(String designation) {
this.designation = designation;
}

@XmlElement(name="Name")
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@XmlElement(name="Salary")
public int getSalary() {
return salary;
}

public void setSalary(int salary) {
this.salary = salary;
}

@XmlElement(name="BankAccount")
public String getBankAccount() {
return bankAccount;
}

public void setBankAccount(String bankAccount) {
this.bankAccount = bankAccount;
}

}

演示代码

下面是您需要编写的代码,用于将 XML 读取为对象形式,然后将其输出回 XML。

import javax.xml.bind.*;
import java.io.File;

public class JaxbDemo {

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

Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("input.xml");
Employee employee = (Employee) unmarshaller.unmarshal(xml);

Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(employee, System.out);
}

}

输入.xml/输出

如您所见,这是您问题中的 XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Employee>
<Designation>Executive</Designation>
<Name>Praveen Kumar</Name>
<Salary>90000</Salary>
<BankAccount>10111</BankAccount>
</Employee>

关于java - 反序列化 XML 文件而不转换 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26609152/

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