当前位置: 首页 > 知识库问答 >
问题:

当列表和元素具有相同的名称时取消封送列表

应煌
2023-03-14

我有一个棘手的XML要散集:

<suppliers>
<suppliers id="1"/> 
...
<suppliers_options>
<suppliers_options supplr_id="1" option_type_id="1"/>
...
</suppliers_options>
<suppliers_ratios>
<spr site_id="1" supplr_id="1" ratio="0"/>
...
</suppliers_ratios>
</suppliers>

我的第一个想法是:

@XmlRootElement(name = "suppliers")
public class SupplierDto {
    @XmlElement(name = "suppliers")
    private Supplier suppliers;

    @XmlElementWrapper(name = "suppliers_options")
    @XmlElement(name = "suppliers_options")
    private List<SuppliersDistrib> suppliersOptions;

    @XmlElementWrapper(name = "suppliers_ratios")
    @XmlElement(name = "sr")
    private List<SuppliersRatio> suppliersRatios;
}

@XmlRootElement(name = "suppliers")
public class Supplier {
...
}

但是因为根元素和列表元素都命名为“供应商”,所以它给了我一个例外:

java.lang.ClassCastException: class _.Supplier cannot be cast to _.SupplierDto (_.Supplier and _.SupplierDto are in unnamed module of loader 'app')

当我删除供应商类别上的@XmlRootElement(名称=“供应商”)时,它开始正确取消封印。

有人能解释一下处理这个棘手的XML的正确方法是什么吗?为什么我的解决方法有效?

共有1个答案

楚畅
2023-03-14

您的xml无效。

这里正确的方法是首先创建xsd模式,然后您将能够使用xjcjava实用程序解组/生成java类。

 类似资料:
  • 问题内容: 我有两个表,它们的定义如下: 和这里代表。 我做了一个简单的本地SQL只能加入到选择和为: 但是我在行上遇到异常: 堆栈跟踪 : 你能建议出什么事了吗? 问题答案: 您需要设置结果别名。

  • 问题内容: 该查询工作正常。但是问题是,产品表和类别表都具有名为“ name”和“ id”的字段。因此,当我获取此查询的结果时,它只给我一个名称和一个ID,但同时又需要ID和名称。 我如何做到这一点而不必重命名字段?是否可以使用自定义名称(例如product_name和category_name)返回? 问题答案: 您可以将别名添加到字段:

  • 我正在使用的数据库有许多具有相同列但(显然)具有不同表名的表(不是我设计的)。例如(这些是数据库表名): 有没有可能用JPA和Hibernate将这些映射到一个Java类实体?类的名称是,然后在使用它时传入例如,以便对象使用表? 还是只使用普通的、普通的Java对象来完成这样的任务更好? 谢谢你!

  • 我在取消激发两个表之间的连接结果时遇到问题。这两个表定义为: 我想取消这一点,为每个ID/测试组合获取一行,以实现结果: 如果我在没有指定感兴趣的列的情况下编写unpivot,它看起来是这样的: 这会产生错误ORA-00918:列定义不明确 如果我尝试通过指定要使用的列来编写它,它看起来像这样: 这会产生错误ORA-01748:此处只允许使用简单的列名 有办法让这个unpivot工作吗?我可以将其

  • 问题内容: 给定上面的xml文件,我将如何检索标签内所有标签的列表?我想获取“名称”的所有值以及标签之间的数字值。像这样: 问题是我不知道会有多少个附加标签。可能没有,也可能有20。我需要某种方法来对它们全部进行计数,然后删除信息。 问题答案: 这是一个使用JDK执行查询的示例。它假定变量包含您的XML文档。

  • 问题内容: 我有两个表,它们的定义如下: 和这里代表。 我做了一个简单的本地SQL只能加入到选择和为: 但是我在行上遇到异常: 堆栈跟踪 : 您能建议出什么事了吗? 问题答案: 您需要设置结果别名。