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

JAXB 取消编组在运行时选择根名称

段干德泽
2023-03-14

我有几个带有可选根元素的xml文件:

<ulti86>, 
<ulti75>, 
<ulti99>....

否则,xml结构是相同的。

我想在同一个pojo中取消封送这些文件。

我看到可以在运行时更改编组操作中的元素的名称

JAXBElement and Qname (like : JAXBElement<Customer> jaxbElement = 
new JAXBElement<Customer>(new QName(null, "customer"), Customer.class, customer);)

有没有可能在解组运行时指明根元素的名称?

乌尔蒂级 :

@XmlRootElement
public class Ulti {
....
}

散集方法:

JAXBContext jaxbContext = JAXBContext.newInstance(Ulti.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
File xmlFile = new File(getFullFileName());
Ulti icc = (Ulti) unmarshaller.unmarshal(xmlFile);

共有2个答案

许明朗
2023-03-14

您可以使用< code>Unmarshaller上的< code > unmarshall 方法之一,该方法采用< code>Class参数来获得您正在寻找的行为。通过告诉JAXB您正在解组什么类型的< code>Class,它不需要通过根元素自己找出一个。

StreamSource xmlSource = new StreamSource(getFullFileName());
JAXBElement<Ulti> jaxbElement = unmarshaller.unmarshal(xmlSource, Ulti.class);
Ulti icc = jaxbElement.getValue();

注意:

使用Unmarshaller.unmarshal(Source, Class)优于JAXB.unmarshal(File, Class)的优点是通过创建可重用的JAXBContext仅处理一次元数据的性能优势。

周学义
2023-03-14

使用 JAXB 类,根元素的名称应该是无关紧要的,您可以更改它,但解封仍会成功。

示例输入时间:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<point>
    <x>1</x>
    <y>2</y>
</point>

取消编组代码:

Point p = JAXB.unmarshal(new File("p.xml"), Point.class);
System.out.println(p); // Output: java.awt.Point[x=1,y=2]

现在,如果您将根元素更改为例如< code > "

 类似资料:
  • 我需要你在JAXB编组方面的帮助。这是关于命名空间的。我在这个令人惊叹的网站上阅读了不同的博客和很多答案,但我还没有意识到如何解决我的问题。 我需要用一些复杂的(至少对我来说)名称空间生成一个XML。 如您所见,该XML具有 < code > xmlns:xsi = " http://www . w3 . org/2001/XML schema-instance " 和 http://www.sa

  • 我有几个关于JAXB编组的简单问题。我正在尝试封送包含以下字段的类: 只需使用以下序列化代码: 我得到的输出是: 现在,我面临的问题如下: > 我想要名称空间xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“出现在根元素中,即TokenRestrictionTemplate中,而不是单个子元素中。如何实现这一点? 我有一些元素,例如带有@Xm

  • 我有一个XML要与JAXB解组。如果我从元素中删除所有名称空间属性,代码运行良好,但是如果我保留名称空间属性的话,在解组后会得到一个空对象。 XML是这样的: 我的动物豆是这样的: 猫豆就像: 在运行时,我得到一个空对象。我试图从属性中删除< code>"z:",得到了这个异常: 如果我从猫和动物中删除命名空间,我会得到这个例外: 下面是解组的最终代码。最后一行给出了一个空指针异常 我不确定如何处

  • 问题内容: 如果项目已排序,是否可以运行select语句并获取行号? 我有一张这样的桌子: 然后,我可以运行此查询以按ID获取订单数量: 这样,我就可以对表格中的每个表格进行计数: 我也想获得行号,所以我可以知道那是第一行,第二行,等等(本质上是订单的排名,而不仅仅是原始计数)。我知道当我返回结果集时可以在Java中执行此操作,但是我想知道是否有一种方法可以纯粹在SQL中处理它。 更新资料 设置等

  • 问题内容: 我正在使用带有注释的Spring Bean,并且需要在运行时选择其他实现。 例如,我需要Windows平台,我需要Linux平台。 目前,我只知道一种可怕的解决方案: 请考虑我仅使用注释,而不使用XML配置。 问题答案: 您可以将bean注入移动到配置中,如下所示: 或者,您可以使用配置文件和,然后用注释(如或)注释您的服务实现,并为您的应用程序提供此配置文件之一。

  • 我使用log4j2.9 我在log4j2.xml中配置了文件追加器。 我在Runtiime找不到任何如何选择appender的例子。 你能给我举个简单的例子吗?