如何将多层节点的 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>
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>
<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文件没关系。