【问题标题】:Convert xml to hashmap and vice-versa将 xml 转换为 hashmap,反之亦然
【发布时间】:2019-11-27 09:37:22
【问题描述】:

我有一个具有以下结构的 xml 架构:

<?xml version="1.0" encoding="UTF-8"?>
<page>
   <body>
      <item attr1="a1" attr2="a2" />
      <item attr1="a1" attr2="a2" attr3="a3" attr4="a4" attr_n="a_n" />
      <item attr1="a1" attr2="a2" attr3="a3" attr4="a4" attr_n="a_n">
         <element1>abc</element1>
         <element2>xyz</element2>
         <element_n>nnn</element_n>
      </item>
   </body>
</page>

item标签可以有n个已知或未知的属性和元素。它也可能有也可能没有任何元素。

我想将此 xml 解析为 java pojo,我更喜欢将 hashmap 用于字段item。它解析其余的东西,但 item 的元素/属性没有被解析。它始终为空。任何有关如何实现这一目标的建议将不胜感激。

我的pojo结构是这样的:

Page.java


public class Page
{
    private Body body;

    public Body getBody ()
    {
        return body;
    }

    public void setBody (Body body)
    {
        this.body = body;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [body = "+body+"]";
    }
}

Body.java


public class Body
{
    private List<Map<String, Object>> item;

    public List<Map<String, Object>> getItem ()
    {
        return item;
    }

    public void setItem (List<Map<String, Object>> item)
    {
        this.item = item;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [item = "+item+"]";
    }
}

【问题讨论】:

  • 我会使用 JAXB 执行此操作,并在 Item 中使用 @XmlAnyAttribute 将属性映射到 java.util.Map
  • 它适用于java.util.Map。但我的是List&lt;Map&lt;String, Object&gt;&gt;,它不起作用
  • 您可以使用List&lt;Item&gt; 并在Item 中添加您的Map。这几乎是一样的。
  • 那会改变我的 xml 结构
  • 不,不会。但是,您的 Java 类不会像您想要的那样完全,这是正确的。但在我看来,这是一个很低的价格。

标签: java xml spring-boot xml-parsing


【解决方案1】:

创建一个xsd 架构文件。您可以在 Eclipse 中获取插件,该插件可以将 xml 转换为 xsd。使用 jibxjaxb 等框架创建模式类。这些库具有将对象转换为xml 的类,反之亦然。

【讨论】:

  • 我尝试使用 jaxb,但无法初始化 item 对象,请查看我的 pojo 结构。
  • 这些库中有一些工具可以为您创建带有所需注释的模式类。你不需要手工制作它们。
  • 我知道这些库为我创建了模式类。但是这些属性不断增加和减少,那些是动态值。这就是我不想保持固定架构的原因
  • 我相信你应该使用 json 而不是 xml。这将符合您的要求并且易于解析。
  • 好吧,我使用 json 和 xml。它基于请求中的格式参数。如果格式 = xml,我发送 xml。如果格式是json,我发送json
猜你喜欢
  • 2023-04-03
  • 2015-03-05
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 2011-10-08
  • 2013-03-15
  • 2019-09-19
相关资源
最近更新 更多