如何将多层节点的 xml 文件转换成 Java 对象呢?
XML 文件如下:<service name="sms-1" type="SMS" >
<topology>
<role name="fdb-PPSProxy" type="cluster" scaling="false">
<node name="fdb-PPSProxy" host="vm1" >
<software name="PPSProxy" /> 
<software name="fdb" /> 
</node>
<node name="PPSProxy" host="vm4" >
<software name="PPSProxy" /> 
<software name="fdb" />  
</node>
</role>
<role name="FCC-UserProxy" type="dual_machine" scaling="false">
<node name="FCC-UserProxy" host="vm2" >
<software name="Userproxy" /> 
<software name="FCC" /> 
</node>
<node name="FCC-UserProxy" host="vm5" >
<software name="Userproxy" /> 
<software name="FCC" />  
</node>
</role>
</topology>
</service>

解决方案 »

  1.   


    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="topology">
    <xs:complexType>
    <xs:sequence>
    <xs:element ref="role" maxOccurs="unbounded"/>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    <xs:element name="software">
    <xs:complexType>
    <xs:attribute name="name" use="required">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    </xs:complexType>
    </xs:element>
    <xs:element name="service">
    <xs:complexType>
    <xs:sequence>
    <xs:element ref="topology"/>
    </xs:sequence>
    <xs:attribute name="type" use="required">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="name" use="required">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    </xs:complexType>
    </xs:element>
    <xs:element name="role">
    <xs:complexType>
    <xs:sequence>
    <xs:element ref="node" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="type" use="required">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="scaling" type="xs:boolean" use="required"/>
    <xs:attribute name="name" use="required">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    </xs:complexType>
    </xs:element>
    <xs:element name="node">
    <xs:complexType>
    <xs:sequence>
    <xs:element ref="software" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="name" use="required">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="host" use="required">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    </xs:complexType>
    </xs:element>
    </xs:schema>
    用这个schema试试,生成java对象(建议用maven插件生成),
    JAXB跟多少层的xml文件没关系。