现在,xml如下所示:
<db>
<type1>
<data1>...</data1>
<data2>...</data2>
...
<data7>...</data7>
</type1>
<type2>
<meta1>...</meta1>
<meta2>...</meta2>
...
<meta9>...</meta9>
</type2>
.....
</db>
这个xml只包含几个type1和type2信息。我希望解组这个xml文件,只需要type1的信息data1,data3,data5和type2的meta1,meta4,meta6。
对于type1,每个type1包含data1,data3和data5,但可能不包含data2,data4,data6,data7。
对于type2,每个type1包含meta1,meta4和meta6,但可能不包含meta2,meta3,meta5,meta7,meta8,meta9。 我有三个问题:
如何处理此xml文件中的两种类型?定义两个类?
我不知道如何解决data2,data4,data6,data7可能不会出现在这个xml文件中的问题。
我需要两个定义两个列表来保存结果吗?因为有许多标签,如type1和type2。
有人能给我一些学习的链接吗?我找到了很多,但他们没有帮助。感谢!!!
答案 0 :(得分:0)
如果你想 unmarshall ,那意味着映射到特定的Java类,在这种情况下type1
和type2
将是不同的类。
如果你想要一些更动态的东西,type1
和type2
不是真正的Java类,那你就是在谈论解析,而不是解组,在这种情况下你应该看看DOM或StAX。
对于编组,您可以指定类似的内容(为了简洁而省略了getter和setter):
@XmlRootElement(name="db")
public class Db {
@XmlElement(required=true) private Type1 type1;
@XmlElement(required=true) private Type2 type2;
}
public class Type1 {
@XmlElement(required=true ) private String data1;
@XmlElement(required=false) private String data2;
@XmlElement(required=true ) private String data3;
@XmlElement(required=false) private String data4;
@XmlElement(required=true ) private String data5;
@XmlElement(required=false) private String data6;
@XmlElement(required=false) private String data7;
}
public class Type2 {
@XmlElement(required=true ) private String meta1;
@XmlElement(required=false) private String meta2;
@XmlElement(required=false) private String meta3;
@XmlElement(required=true ) private String meta4;
@XmlElement(required=false) private String meta5;
@XmlElement(required=true ) private String meta6;
@XmlElement(required=false) private String meta7;
@XmlElement(required=false) private String meta8;
@XmlElement(required=false) private String meta9;
}
在其上运行schemagen
将生成以下XSD文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="db" type="db"/>
<xs:complexType name="db">
<xs:sequence>
<xs:element name="type1" type="type1"/>
<xs:element name="type2" type="type2"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="type1">
<xs:sequence>
<xs:element name="data1" type="xs:string"/>
<xs:element name="data2" type="xs:string" minOccurs="0"/>
<xs:element name="data3" type="xs:string"/>
<xs:element name="data4" type="xs:string" minOccurs="0"/>
<xs:element name="data5" type="xs:string"/>
<xs:element name="data6" type="xs:string" minOccurs="0"/>
<xs:element name="data7" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="type2">
<xs:sequence>
<xs:element name="meta1" type="xs:string"/>
<xs:element name="meta2" type="xs:string" minOccurs="0"/>
<xs:element name="meta3" type="xs:string" minOccurs="0"/>
<xs:element name="meta4" type="xs:string"/>
<xs:element name="meta5" type="xs:string" minOccurs="0"/>
<xs:element name="meta6" type="xs:string"/>
<xs:element name="meta7" type="xs:string" minOccurs="0"/>
<xs:element name="meta8" type="xs:string" minOccurs="0"/>
<xs:element name="meta9" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>