我想使用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生成类时,我得到以下内容:
在Content类中,检索所有人和组的方法是
public List<Object> getPersonOrGroup() {
    if (personOrGroup == null) {
        personOrGroup = new ArrayList<Object>();
    }
    return this.personOrGroup;
}
有没有什么我可以在dtd文件中更改,所以Java类的生成将在java类中进行persons和groups分离Content,所以要检索所有人和组将是Content.getPersons()和Content.getGroups()相应地进行调用?
sur*_*rya 12
xjc -dtd -d generatedsrc -p com.examples log4j.dtd
将生成目录generatedsrc中的类,使用的包将是com.examples.
您可以在此处找到更多信息:http: //www.javaworld.com/community/node/7622
在他的回应中,mavrav 似乎告诉我们 DTD 是不可能的。我不太了解如何使用DTD。但如果可以的话,请将 DTD 转换为 XML 模式。
我尝试过这个 shema:
<?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>
在我使用以下 cmd 生成 Java 类后:
xjc -p com.mypackage schema.xsd
它为我提供了 Content 类的以下代码:
@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;
    }
}