我希望Country类存储“ ISO_3166-1_Alpha-2_Code”代码。该代码当前取回“ ISO_3166-1_Numeric-3_Code”代码。无法弄清楚如何调整Country类以获得我想要的特定属性。
XML:
<?xml version='1.0' encoding='UTF-8'?>
<wd:Message_Event_Configuration">
<wd:Message_Event_Configuration_Data>
<wd:Country_Reference wd:Descriptor="Saint Martin">
<wd:ID wd:type="WID">66b7082a21e510000961bb6d82b5002a</wd:ID>
<wd:ID wd:type="ISO_3166-1_Alpha-2_Code">MF</wd:ID>
<wd:ID wd:type="ISO_3166-1_Alpha-3_Code">MAF</wd:ID>
<wd:ID wd:type="ISO_3166-1_Numeric-3_Code">663</wd:ID>
</wd:Country_Reference>
<wd:Country_Reference wd:Descriptor="Saint Barthelemy">
<wd:ID wd:type="WID">881527f6cec910000ba81e8dccf61127</wd:ID>
<wd:ID wd:type="ISO_3166-1_Alpha-2_Code">BL</wd:ID>
<wd:ID wd:type="ISO_3166-1_Alpha-3_Code">BLM</wd:ID>
<wd:ID wd:type="ISO_3166-1_Numeric-3_Code">652</wd:ID>
</wd:Country_Reference>
</wd:Message_Event_Configuration_Data>
</wd:Message_Event_Configuration>
国家/地区列表:
@XmlRootElement(name = "Message_Event_Configuration")
@XmlAccessorType(XmlAccessType.FIELD)
public class Countries {
@XmlElementWrapper(name = "Message_Event_Configuration_Data")
@XmlElement(name = "Country_Reference")
private List<Country> countries = new ArrayList<Country>();
public List<Country> getCountries() {
return countries;
}
public void setCountries(List<Country> countries) {
this.countries = countries;
}
}
国家/地区:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Country_Reference")
public class Country {
@XmlElement(name = "ID")
private String isoCode;
public Country() {
}
public Country(String isoCode) {
this.isoCode = isoCode;
}
@XmlAttribute(name = "ISO_3166-1_Alpha-2_Code")
public String getISOCode() {
return isoCode;
}
public void setISOCode(String isoCode) {
this.isoCode = isoCode;
}
}
答案 0 :(得分:1)
# import Mutation.updateUser from "./generated/prisma.graphql" @isAdmin
XML元素包含ISO代码,用
几个<Country_Reference>
XML元素中的复杂方式。
因此,将它们建模为Java <wd:ID>
属性太简单了。
相反,您需要对Java结构进行建模,使其与XML结构更加相似。
XML元素String
的序列可以由属性<wd:ID>
建模
需要由@XmlElement(name="ID")
注释。
XML属性List<ID> idList
可以由属性wd:Descriptor="...."
建模
需要由@XmlAttribute(name="Descriptor")
注释。
为方便起见,您可以添加一个全参数构造函数和一些获取方法
String descriptor
中的WID和ISO代码。
List<ID>
XML元素@XmlAccessorType(XmlAccessType.FIELD)
public class Country {
@XmlAttribute(name = "Descriptor")
private String descriptor;
@XmlElement(name = "ID")
private List<ID> idList;
public Country() {
}
public Country(String descriptor, String wid, String isoAlpha2Code, String isoAlpha3Code, String isoNumeric3Code) {
this.descriptor = descriptor;
idList = new ArrayList<>();
idList.add(new ID("WID", wid));
idList.add(new ID("ISO_3166-1_Alpha-2_Code", isoAlpha2Code));
idList.add(new ID("ISO_3166-1_Alpha-3_Code", isoAlpha3Code));
idList.add(new ID("ISO_3166-1_Numeric-3_Code", isoNumeric3Code));
}
public String getWid() {
return getIdByType("WID");
}
public String getIsoAlpha2Code() {
return getIdByType("ISO_3166-1_Alpha-2_Code");
}
public String getIsoAlpha3Code() {
return getIdByType("ISO_3166-1_Alpha-3_Code");
}
public String getIsoNumeric3Code() {
return getIdByType("ISO_3166-1_Numeric-3_Code");
}
private String getIdByType(String idType) {
for (ID id : idList) {
if (id.getType().equals(idType))
return id.getValue();
}
return null;
}
}
非常复杂。因此,我们需要一个单独的POJO类来对其进行建模。
我们将其称为<wd:ID>
类。
ID
和<wd:ID ..>
之间的XML文本由属性</wd:ID>
建模
需要由@XmlValue
注释。
XML属性String value
由属性wd:type="..."
建模
需要由@XmlAttribute
注释。
为方便上面的类String type
使用,添加了一个全参数构造函数。
Country
下面的屏幕截图(来自调试器)显示了Java结构 并确认XML示例的解组工作正常: