java - JAXB 元素的属性

标签 java xml jaxb marshalling

我正在使用 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>

关于java - JAXB 元素的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53933546/

相关文章:

java - Ant 构建失败 - 未设置 libs.CopyLibs.classpath 属性

java - 在 Java Web Start 中检索地理位置

java - 使用 JAXB 创建具有动态标签名称的 XML

xml - 生成没有 .xsd 的 POJO?

java - 如何将多个注释合并为一个注释?

java - 处理来自 BT 芯片的周期性心跳消息

java - 使用 Saxon9he 进行 XSLT 转换抛出 java.net.URISyntaxException : Illegal character in path at index

c# - 'ref' 属性不能存在。 C#中的验证错误

java - 需要程序方面的帮助,FileInputStream 只读取文本文件的一行时遇到问题。 [作业帮助]

java - JAXB - 如何在没有 header 的情况下编码(marshal) Java 对象