我想从使用JAXB DTD文件生成Java类。
DTD中看起来是这样的:
<!--Contents-->
<!ELEMENT persons (header, content) >
<!ELEMENT groups (header, content) >
<!--Header-->
<!ELEMENT header (version) >
<!ELEMENT version(#PCDATA) >
<!--Content-->
<!ELEMENT content(person, group)* >
<!--Person-->
<!ELEMENT person(p_id, p_name) >
<!ELEMENT p_id (#PCDATA) >
<!ELEMENT p_name (#PCDATA) >
<!--Group-->
<!ELEMENT group(g_id) >
<!ELEMENT g_id(#PCDATA) >
当与JAXB生成的类,我得到了以下的:
- 的ObjectFactory
- 内容
- 人
- 人
- 组
- 组
在内容类中的方法中检索所有的个人和群体是
public List<Object> getPersonOrGroup() {
if (personOrGroup == null) {
personOrGroup = new ArrayList<Object>();
}
return this.personOrGroup;
}
有什么我可以在DTD文件改变,因此Java类的产生会使persons
和groups
在分离Content
java类,所以中检索所有的个人和团体将是使一个呼叫Content.getPersons()
和Content.getGroups()
respectivly?
在他的回应,mavrav似乎在告诉这是不可能与DTD。 我不知道还有如何使用DTD。 但是,如果你能,转换XML模式的DTD。
我试着用这个玛:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:hr="http://mycompany.com/schema"
elementFormDefault="qualified"
targetNamespace="http://mycompany.com/schema">
<!-- Contents -->
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="header" />
<xs:element name="content" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="groups">
<xs:complexType>
<xs:sequence>
<xs:element name="header" />
<xs:element name="content" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Header -->
<xs:element name="header">
<xs:complexType>
<xs:sequence>
<xs:element name="version" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Content -->
<xs:element name="content">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded" />
<xs:element name="group" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Person -->
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="p_id" type="xs:integer" />
<xs:element name="p_name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Group -->
<xs:element name="group">
<xs:complexType>
<xs:sequence>
<xs:element name="g_id" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
之后,我生成的Java类具有以下CMD:
xjc -p com.mypackage schema.xsd
它让我对内容类下面的代码:
@XmlRootElement(name = "content")
public class Content {
@XmlElement(required = true)
protected List<Object> person;
@XmlElement(required = true)
protected List<Object> group;
public List<Object> getPerson() {
if (person == null) {
person = new ArrayList<Object>();
}
return this.person;
}
public List<Object> getGroup() {
if (group == null) {
group = new ArrayList<Object>();
}
return this.group;
}
}
xjc -dtd -d generatedsrc -p com.examples log4j.dtd
将生成目录generatedsrc的类和用于将com.examples包。
你可以在这里找到更多的信息: http://www.javaworld.com/community/node/7622
文章来源: Generate Java classes with JAXB from a DTD file - how can I modify the DTD?