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