簡體   English   中英

解析XML時如何使XStream將未映射的標簽映射到HashMap?

[英]How to make XStream map unmapped tags to an HashMap when parsing XML?

有一個我想轉換為 Java bean 的 XML 文檔。 我想將 bean 中缺失的字段標記為 hashMap,因為這些字段名稱不斷變化。 有沒有辦法做到這一點?

例如,我的 XML 看起來像

<employee>
   <firstname>stack</firstname>
   <lastname>alpha</lastname>
   <phone1>999-999-9999</phone1>
</employee>

我的 java bean 看起來像

@XstreamAlias("employee")
public class Employee {
       private String firstname;
       private String lastname;
       private map<String, String> unknownfields;
}

當我將 XML 加載到我的 java bean 時,它應該看起來像

firstname="stack", lastname="alpha", unknownfields=[{"phone1","999-999-9999"}]

知道這是一個糟糕的設計,但想檢查這是否可以使用 xstream 實現。

實現您自己的轉換器。 查看JavaBeanConverter以獲取參考實現,因為您希望盡可能接近它。

您需要以不同方式處理事情的唯一地方是這個(在解組方法中)

if (propertyExistsInClass) {
    Class<?> type = determineType(reader, result, propertyName);
    Object value = context.convertAnother(result, type);
    beanProvider.writeProperty(result, propertyName, value);
    seenProperties.add(new FastField(resultType, propertyName));
} else {
    throw new MissingFieldException(resultType.getName(), propertyName);
}

else塊中,它拋出MissingFieldException ,您應該填充您的Map XML 元素名稱在這里很容易獲得,但您需要調整值。 獲取值的線索就在上面的if塊中:

Object value = context.convertAnother(result, type);

唯一的問題是您沒有將值轉換為的 Java 類型。 可能是字符串?

我會繼承JavaBeanConverter並只覆蓋unmarshal方法,但適合您的需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM