0

我使用 JAXB 将 XML 转换为 Java 类。我有两个 Java 类:里程碑和问题。两者都有一个唯一的 ID,并且 ID 字段用“@XMLID”注释。

一个里程碑由几个问题组成,因此它有一个字段变量“问题”,其中包含一个列表。问题和里程碑都包含在父类中,因此问题不是里程碑的子级,而是兄弟级。使用 schemagen,我生成了一个 XMLSchema 来验证 XML 文件。除了 Milestone 的“问题”字段之外,该模式在所有内容上都运行良好。在这里,我不得不手动更改这一行:

<xs:element name="issue" type="xs:IDREF" minOccurs="0" maxOccurs="unbounded"/>

改为 IDREFS 类型:

<xs:element name="issue" type="xs:IDREFS" minOccurs="0" maxOccurs="unbounded"/>

现在,它完美运行。我的问题是:如何在 Milestone 类中注释我的字段“问题”,这样我之后就不必手动更改 XMLSchema?我尝试了@XMLIDREFS,但这似乎无效。

以下是我的代码的相关部分:

问题和里程碑的 XMLSchema

<xs:complexType name="issue">
    <xs:element name="id" type="xs:ID" minOccurs="0"/>
</xs:complexType>
<xs:complexType name="milestone">
    <xs:sequence>
        <xs:element name="id" type="xs:ID" minOccurs="0"/>
        <xs:element name="issue" type="xs:IDREFS" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
 </xs:complexType>

具有当前注释的 Java 类里程碑

public class Milestone {
    private String id;
    private List<Issue> issues = new LinkedList<>();

    @XmlElement(name = "issue")
    public List<Issue> getIssues() {
        return issues;
    }

示例 XML

<RootElement>
    <issue>
        <id>IssueID1</id>
    </issue>
    <issue>
        <id>IssueID2</id>
    </issue>
    <milestone>
        <id>MilestoneID1</id>
        <issue>IssueID1</issue>
        <issue>IssueID2</issue>
    </milestone>
</parent>
4

0 回答 0