【发布时间】:2021-10-23 04:42:43
【问题描述】:
我正在尝试使用 JAXB 映射此 XML 文件并获取 CODE 元素的值。最终,完整的 XML 文件将包含许多收费代码块,我需要提取不同标签的所有值,但现在我只想设法获得一个值。
XML:
<?xml version="1.0" encoding="utf-8" ?>
<tpDoc>
<tpCTRL>
<DocID>CHARGE CODES</DocID>
<SenderID>IES</SenderID>
</tpCTRL>
<PAYLOAD>
<CHARGE_CODE>
<CODE>TEST</CODE>
<DESCRIPTION>M Test</DESCRIPTION>
<SALES_ACCOUNT>34535</SALES_ACCOUNT>
<COSTS_ACCOUNT>500056756745</COSTS_ACCOUNT>
</CHARGE_CODE>
</PAYLOAD>
</tpDoc>
这是编组代码:
public class XMLtoJava {
public static void main(String[] args) throws JAXBException {
File inputFile = new File("C:\\Users\\Inbar\\OneDrive\\OneDrive - alfacloud.co.il\\MSF\\Developments\\OrdertoCashThirdPartyProcess(B2B)\\MSF XMLFiles\\ChargeCodesSmall.XML");
JAXBContext jaxbContext = JAXBContext.newInstance(CC.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
CC chargeCode = (CC) unmarshaller.unmarshal(inputFile);
System.out.println();
System.out.println(chargeCode.getCode());
}
}
班级:
@XmlRootElement(name="tpDoc")
@XmlAccessorType(XmlAccessType.FIELD)
public class CC {
@XmlElement(name="CODE")
private String code;
@XmlElement(name="DESCRIPTION")
private String description;
@XmlElement(name="SALES_ACCOUNT")
private String salesAccount;
@XmlElement(name="COSTS_ACCOUNT")
private String costsAccount;
public String getCode() {
return code;
}
}
但是,我得到的只是空值。我做错了什么?
【问题讨论】:
-
tpDoc没有您在CC中指定的字段。它有一个PAYLOAD,其中包含一个CODE和其他元素。换句话说,您在CC中的定义与 XML 结构不匹配。 -
@MarkRotteveel 那么我想以某种方式创建另一个名为 payload 的类还是我可以以某种方式告诉这个 tpdoc 类正确的子结构?换句话说,在创建尽可能少的类的同时,我该怎么做才能解决这个问题。
-
建议:在生成 Java 类时,请确保您的示例 XML 包含多个
<CHARGE_CODE>部分,因为这最终是您需要的,并且与 XML 相比,这将改变 Java 的结构只有一个<CHARGE_CODE>条目的示例。