java - 如何使用@XmlIDREF和@XmlID

标签 java xml annotations jaxb

我不太明白 @XmlIDREF@XmlID 如何协同工作。通过使用 XmlIDREF,我只创建对实际元素的引用。但是 XmlID 的用例是什么。

我想创建对 Publication 类的引用。使用 @XmlIDREF 注释出版物列表是否足够?

public class Author {

    private String id;
    private String name;
    private List<Publication> publications = new LinkedList<>();

    public Author() {
        super();
    }
    @XmlElement
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @XmlElement
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
    @XmlIDREF
    public List<Publication> getPublications() {
        return publications;
    }

最佳答案

I want to create a reference to the class Publication. Is it enough to annotate the publication List with @XmlIDREF?

不,这只是您需要的一半。

  • 你已经有了这个: 与@XmlIDREF您标记关系的引用一侧 (从 Author 指向 Publication )。

    public class Author {
    
        ...
    
        @XmlIDREF
        @XmlElement(name = "publication")
        public List<Publication> getPublications() {
            return publications;
        }
    
        ...
    
    }
    
  • 您还需要标记引用一侧(Publication本身) 通过使用 @XmlID 注释其属性之一,例如这样:

    public class Publication {
    
        ...
    
        @XmlID
        @XmlElement
        public String getId() {
            return id;
        }
    
        ...
    }
    

然后您就可以像下面的示例一样处理 XML 内容:

<root>
    <publication>
       <id>p-101</id>
       <title>Death on the Nile</title>
    </publication> 
    <publication>
       <id>p-102</id>
       <title>The murder of Roger Ackroyd</title>
    </publication> 
    ...
    <author>
       <id>a-42</id>
       <name>Agatha Christie</name>
       <publication>p-101</publication>
       <publication>p-102</publication>
    </author>
    ...
</root>

你看,XML 引用(如 <publication>p-101</publication> ) 映射到 Java 对象引用(在 List<Publication> publications 中)。

关于java - 如何使用@XmlIDREF和@XmlID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56375499/

相关文章:

java - 替换格式不正确的 XML 正文中的字符

java - 如何将 rdf xml 转换为 n-triples?

java - 使 gwt 按钮透明

java - lwuit 中的 TextField 到 DatePicker

java - Eclipse 无法清理构建输出

java - 我可以将多个处理器的注释放入 Java 类中吗?

java - 常量类的接口(interface)模式

java - 使用 JAXB 在 java 中解码 xml 属性和值

java - 我可以在编译时从注释处理器中的 TypeVariable 或 VariableElement 获取底层类上的方法列表吗

spring - 是否可以在 Spring、Eclipselink 和 Tomcat 环境中使用@Transational?