【发布时间】:2016-12-24 17:38:12
【问题描述】:
我正在使用 JAXB 来编组一个 Bean 对象。我搜索了很多,浏览了博客,但找不到可行的解决方案。我也是 JAXB 的新手,因此我们将不胜感激。
所需的xml结构是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<REPORT REPORT_YEAR="2016">
<STANDARD_FINANCIALS>
<BALANCE_SHEET>
<ASSET label = "ASSET">76</ASSET>
<LIABILITY label = "LIABILITY">90</LIABILITY>
</BALANCE_SHEET>
</STANDARD_FINANCIALS>
</REPORT>
我使用的 POJO(bean) 类是:
@XmlRootElement(name = "REPORT")
public class Report {
private String reportYear;
public String getReportYear() {
return reportYear;
}
@XmlAttribute(name = "REPORT_YEAR")
public void setReportYear(String reportYear) {
this.reportYear = reportYear;
}
private StandardFinancials financials;
public StandardFinancials getFinancials() {
return financials;
}
@XmlElement(name = "STANDARD_FINANCIALS")
public void setFinancials(StandardFinancials financials) {
this.financials = financials;
}
public Report(){
}
public Report(String reportYear, StandardFinancials financials) {
super();
this.reportYear = reportYear;
this.financials = financials;
}
}
还有
public class StandardFinancials {
private BalanceSheet balanceSheet;
@XmlElement(name = "BALANCE_SHEET")
public void setBalanceSheet(BalanceSheet balanceSheet) {
this.balanceSheet = balanceSheet;
}
public StandardFinancials(BalanceSheet balanceSheet) {
super();
this.balanceSheet = balanceSheet;
}
}
另外一个是:
public class BalanceSheet {
private String liability;
private String asset;
public String getLiability() {
return liability;
}
@XmlElement(name = "LIABILITY")
public void setLiability(String liability) {
this.liability = liability;
}
public String getAsset() {
return asset;
}
@XmlElement(name = "ASSET")
public void setAsset(String asset) {
this.asset = asset;
}
public BalanceSheet(String liability, String asset) {
super();
this.liability = liability;
this.asset = asset;
}
}
主要的方法是:
public class Jaxbmarshelling {
public static void main(String[] args) throws Exception {
JAXBContext context=JAXBContext.newInstance(Report.class);
Marshaller marshaller=context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);
BalanceSheet balanceSheet = new BalanceSheet("90", "76");
StandardFinancials financials = new StandardFinancials(balanceSheet);
Report report = new Report("2016",financials);
StringWriter xml = new StringWriter();
marshaller.marshal(report, xml);
System.out.println(xml.toString());
}
}
但我得到的输出 xml 是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<REPORT REPORT_YEAR="2016">
<STANDARD_FINANCIALS>
<BALANCE_SHEET>
<ASSET>76</ASSET>
<LIABILITY>90</LIABILITY>
</BALANCE_SHEET>
</STANDARD_FINANCIALS>
</REPORT>
我无法获取资产负债表类的每个元素的标签属性。 请指导我获取所需的xml。
【问题讨论】: