java - JAXB 元素的属性
问题描述
我正在使用 JAXB 创建 xml。我想在元素 PrimaryValue 和 AlternativeSpelling 上设置属性“lang”。
<AgencyOrUnit>
<PrimaryValue lang="el">ΓΑΔΑ</PrimaryValue>
<AlternativeSpelling lang="en">Athens General Police Directorate</AlternativeSpelling>
</AgencyOrUnit>
这是我的代码:
@XmlRootElement(name = "OwnerReference")
@XmlType(propOrder = { "primaryValue", "alternativeSpelling"})
public class AgencyOrUnit {
private String PrimaryValue;
private String AlternativeSpelling;
public String getPrimaryValue() {
return PrimaryValue;
}
public void setPrimaryValue(String PrimaryValue){
this.PrimaryValue = PrimaryValue;
}
public String getAlternativeSpelling() {
return AlternativeSpelling;
}
public void setAlternativeSpelling(String AlternativeSpelling){
this.AlternativeSpelling = AlternativeSpelling;
}
}
下面是编组过程:
AgencyOrUnit agencyOrUnit = new AgencyOrUnit();
agencyOrUnit.setPrimaryValue("ΓΑΔΑ");
agencyOrUnit.setAlternativeSpelling("General Police");
问题是我不知道如何在元素primaryValue 和alternativeSpelling 上设置属性值?
解决方案
您可以使用注释@XmlValue
&@XmlAttribute
但您需要创建一个新类来保存lang
原始值字符串。像这样的东西:
@Setter
@AllArgsConstructor
public class LocaleString {
private String lang;
private String value;
@XmlAttribute
public String getLang() {
return lang;
}
@XmlValue
public String getValue() {
return value;
}
}
然后相应地修改您的AgencyOrUnit
:
@XmlRootElement(name = "OwnerReference")
@XmlType(propOrder = { "primaryValue", "alternativeSpelling"})
@Getter @Setter
public class AgencyOrUnit {
private LocaleString PrimaryValue;
private LocaleString AlternativeSpelling;
}
测试它:
@Test
void test() throws JAXBException {
AgencyOrUnit agencyOrUnit = new AgencyOrUnit();
agencyOrUnit.setPrimaryValue(new LocaleString("el", "ΓΑΔΑ"));
agencyOrUnit.setAlternativeSpelling(new LocaleString("en", "General Police"));
JAXBContext ctx = JAXBContext.newInstance(AgencyOrUnit.class);
Marshaller marshaller = ctx.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(agencyOrUnit, System.out);
}
你应该看到这个:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OwnerReference>
<primaryValue lang="el">ΓΑΔΑ</primaryValue>
<alternativeSpelling lang="en">General Police</alternativeSpelling>
</OwnerReference>
推荐阅读
- gatsby - 如何通过在 React/Gatsby 中导入 mdx 文件来获取 mdxAst
- c++ - 添加到 std::vector 时类字段的奇怪行为
- laravel - Axios 补丁请求不适用于 Laravel
- if-statement - 在 NetLogo 中使用带有代理集的 if 语句
- python - 我正在尝试执行外部联接
- angular - 如何从父组件调用子组件中的方法?
- html - Angular JS - Angular 文件不响应 html(带有 Spring Boot 的 AngularJs)
- reactjs - React Toast 通知已验证功能
- r - 尝试在 r 中的汇总函数中使用条件语句
- authorization - 授权码授予步骤 2 出错 :: {"error":"invalid_grant","error_description":"unauthorized_client"}