说我的xml应如下所示:
<!-- even I move <A id="2">...</A> here, still has this error-->
<A id="1">
...
... (many levels of nested element)
<C>
<B ref="2"/>
</C>
...
</A>
<A id="2">...</A>
所以我定义了以下xsd文件:
<xs:complexType name="A" abstract="true">
<xs:attribute name="id" type="xs:ID" use="required"/>
...
</xs:complexType>
<xs:complexType name="B">
<xs:attribute name="ref" type="xs:IDREF" use="required"/>
</xs:complexType>
但是当我想使用JAXB解析这个xml文件时,它总是抱怨<B ref="2"/>
有错误:
未定义ID“”。
我的代码:
public class A {
private String id;
@XmlAttribute
@XmlID
public String getId() {
return id;
}
...
}
public class C {
private A b;
@XmlIDREF
@XmlElement
public A getB() {
return b;
}
}
那么问题是什么?
答案 0 :(得分:0)
通过一整天的搜索和试验,我终于找到了错误并解决了它:
C
实际上有哪个类不是直接A
的引用,而是B
只有一个引用的类<xs:complexType name="C">
<xs:choice>
<xs:element name="B" type="xs:IDREF"/>
</xs:choice>
</xs:complexType>
。所以解决方案现在很清楚:
要么将xsd更改为:
public class C {
private B b;
...
}
// addint a B class which contains the reference
public class B {
private A b;
@XmlIDREF
@XmlElement
public A getB() {
return b;
}
}
或者更改java代码:
BEGIN;
INSERT INTO scholarshipDetail(schid,schName,year) VALUES(3,'sun',2017);
INSERT INTO scholarshipCourse(schID,course) VALUES(LAST_INSERT_ID(),'science');
COMMIT;
如果您对我如何解决此问题感兴趣,可以参考my blog。