java - 如何通过XStream在类内部使用HashMap读取xml

标签 java xml xstream

这是我的类(class)字段。

 @XStreamAlias("OrgEntity")
    public class OrgEntity implements Serializable {

    private static final long serialVersionUID = 2L;
    private static final int MAX_SHARE_PERCENTAGE = 100;
    private static final byte MIN_ORG_NAME_LENGTH = 2;
    public static Map<String, OrgEntity> allOrgMap;
    @XStreamAlias("entityName")
    @XStreamAsAttribute
    private String entityName;
    private OrgType type;
    private float sharesPortionHeldBy;
    private double authorisedCapital;
    private String parentCompanyName;
    private Human ceo;

    private Map<ShareHolder, Float> shareHoldersMap;
.... 
}

这是我需要读取的 xml:

<OrgEntity entityName="nonParentCompany">
  <type>ZAO</type>
  <sharesPortionHeldBy>13.0</sharesPortionHeldBy>
  <authorisedCapital>1000000.0</authorisedCapital>
  <ceo surname="Narishkin" firstName="Denis" middleName="Ven"/>
  <shareHoldersMap>
    <entry>
      <ShareHolder surname="Trump" firstName="Don" middleName="J">
        <shareHolderPortfolioMap>
          <shareHolderAsset>
            <entry>
              <string>nonParentCompany</string>
              <float>5.0</float>
            </entry>
          </shareHolderAsset>
          <outer-class reference="../.."/>
        </shareHolderPortfolioMap>
        <currCom reference="../../../.."/>
        <sharesNumberCurrComp>5.0</sharesNumberCurrComp>
      </ShareHolder>
      <float>5.0</float>
    </entry>
    <entry>
      <ShareHolder surname="Smith" firstName="Adam" middleName="A">
        <shareHolderPortfolioMap>
          <shareHolderAsset>
            <entry>
              <string>nonParentCompany</string>
              <float>8.0</float>
            </entry>
          </shareHolderAsset>
          <outer-class reference="../.."/>
        </shareHolderPortfolioMap>
        <currCom reference="../../../.."/>
        <sharesNumberCurrComp>8.0</sharesNumberCurrComp>
      </ShareHolder>
      <float>8.0</float>
    </entry>
  </shareHoldersMap>
</OrgEntity>

如何通过XStream读取这个xml?我尝试使用下面的代码但失败了。我收到的异常(exception)是

Exception in thread "main" com.thoughtworks.xstream.InitializationException: No field "shareHoldersMap" for implicit collection

我应该怎么做才能读取 xml?

public static void main(String[] args) {
        OrgEntity o = DataForRunners.createDataForBasicFile15OrgsWithShareHoldingsUpdateForXML().get(0);
        String xmlOrgObj = "src/main/java/com/.... ";
        new XStreamDecorator<OrgEntity>(o, xmlOrgObj);
        XStream xstream = new XStream(new DomDriver());
        xstream.alias("OrgEntity", OrgEntity.class);
        xstream.alias("entityName", OrgEntity.class);
        xstream.alias("type", OrgType.class);
        xstream.alias("ceo", Human.class);
        xstream.addImplicitCollection(HashMap.class, "shareHoldersMap");
        InputStream in = null;
        try {

            in = new FileInputStream(xmlOrgObj);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        OrgEntity var =(OrgEntity) xstream.fromXML(in);
        System.out.println(var);
    }

最佳答案

在 XStream 1.4.5 及更高版本中,您可以使用 NamedMapConverter

所以根据你的情况,你可以尝试这样的事情:

XStream xstream = new XStream();
NamedMapConverter namedMapConverter = new NamedMapConverter(xstream.getMapper(), "entry", "key", ShareHolder.class, "value", Float.class);
xstream.registerConverter(namedMapConverter);

关于java - 如何通过XStream在类内部使用HashMap读取xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42595466/

相关文章:

java - 我的 Swing GUI 没有更新。为什么?

java - XStream - 解码 - XML 中指定的类型不可见

java - 使用 xstream 将键值 xml 对映射到 java 映射

java - 如何在Spring Java应用程序中缓存图像文件?

java - StatelessKieSession 不返回插入的对象

java - Apk已安装在bin中但在模拟器中找不到

java - 在 Netbeans 7 中创建和存储 XML 文档

java - 不幸的是,我的 android studio 应用程序在我的设备 Redmi 2 Prime 中停止了,但它在 Nexus 模拟器中运行

java - 如何选择xstream转换器

java - 在一个巨大的列表中查找一个元素