我正在使用動態xml表格格式,該格式由指定列名稱和類型的模式以及包含行的值標記組成。由它生成將java對象轉換爲動態xml
<xs:complexType name="data">
<xs:sequence>
<xs:element name="schema" type="schema"/>
<xs:element name="values" type="values"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="schema">
<xs:anyAttribute/>
</xs:complexType>
<xs:complexType name="values">
<xs:anyAttribute/>
</xs:complexType>
而且一個示例XML:下面XSD的簡化版本
<data>
<schema firstName="string" lastName="string" age="integer">
<values>
<value firstName="A" lastName="B" age="23"/>
<value firstName="C" lastName="D" age="63"/>
…
</values>
</data>
數據生成XML來自數據對象的列表,在我們的例子:
public class Person {
private String firstName;
private String lastName;
private int age;
// getters and setters…
}
目前我正在通過向類中添加如下代碼來創建它(我使用jaxb生成xml):
private static QName FIRST_NAME = new QName("firstName");
private static QName LAST_NAME = new QName("lastName");
private static QName AGE = new QName("age");
private static Map<QName, String> schema;
static {
schema = new HashMap<QName, String>();
schema.put(FIRST_NAME, "string");
schema.put(LAST_NAME, "string");
schema.put(AGE, "integer"):
}
public Map<QName, String> asMap() {
Map<QName, String> map = new HashMap<QName, String>();
map.put(FIRST_NAME, firstName);
map.put(LAST_NAME, lastName);
map.put(AGE, Integer.toString(age)):
return map;
}
public static Map<QName, String> getSchema() {
return schema;
}
然後爲每個將用於生成xml的數據對象執行此操作。雖然我不覺得這是最好的解決方案,但這起作用。我看到的主要問題是模式和值之間沒有聯繫,如果其中一個變化,你必須記得更新另一個。此外,它有點嘈雜,將其添加到所有類。
有人可能會建議一個更好的(更清潔/更通用)的方式嗎?也許一些自動生成模式和/或值映射的好方法?或者任何其他建議......如果我可以在沒有改變類的情況下給出任何java bean的東西,那可能會是最好的,但是如果有必要,我可以很好地裝飾/添加東西給類。 )
謝謝
同意。然而,要做動態部分,首先可以將POJO「序列化」爲地圖,然後從地圖轉換爲XML(或JSON等)。這可能會更容易解決問題。 JAXB不能做以前的(我認爲),但是從common-beans-utils到Jackson的任何東西都可以工作。 – StaxMan 2011-01-25 21:24:12