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

JAXB中可更改的XML结构?

洪高阳
2023-03-14

我正在考虑创建XML文件的Java生成器,然后由另一个Java程序加载这些文件(我不能更改那里的代码)。很明显的答案是JAXB,但是我偶然发现了一个问题。

<HeadTag>
  <firsElement>
    <att1/>
    <att2/>
    <att3/>
  </firsElement>
  <secondElement>
    <att3/>
    <att4/>
    <att5/>
    <att6/>
  </secondElement>
</HeadTag>
<HeadTag>
  <firsElement>
    <att1/>
    <att2/>
    <att3/>
  </firsElement>
</HeadTag>
<HeadTag>
  <secondElement>
    <att3/>
    <att4/>
    <att5/>
    <att6/>
  </secondElement>
</HeadTag>

所有三个XML都将是生成器的有效输出。我已经为fistElement、secondElement等创建了Java类(有很多),但我想不出如何将它们全部添加到一个HeadTag元素下。

我有很多元素,超过500个,所以把它们作为一个字段放在课堂上有点难看。

共有1个答案

帅锦
2023-03-14

如果您能够承担elements类扩展抽象类的费用,那么您可以尝试以下操作:

@XmlAccessorType(XmlAccessType.FIELD)
public abstract class Element{};

@XmlAccessorType(XmlAccessType.FIELD)
public class FirstElement extends Element{ ... };

@XmlAccessorType(XmlAccessType.FIELD)
public class SecondElement extends Element{ ... };

//Other elements classes

@XmlRootEntity
@XmlAccessorType(XmlAccessType.FIELD)
public class HeadTag{
    @XmlElements({
        @XmlElement(name="firstElement",type=FirstElement.class),
        @XmlElement(name="secondElement",type=SecondElement.class),
        //One for each of your classes
    })
    private List<Element> elements;
}

您仍然会有很多@XmlElement注释,但类中不会有500多个字段。

 类似资料:
  • 我有以下结构:

  • 我在使用JAXB和对象列表时遇到问题。JAXB用于从spring 4中开发的REST api中整理/取消整理XML。类结构没有太多xml结构,而我使用的是ArrayList 我有Java业务对象模型如下: 客户端: Offer(根元素): 和反封送器: 问题: 当我发送: 我得到:offer.client.age=0 但如果我将以下内容发送到解组器: 我得到:offer.client.age=21

  • 但我得到了以下堆栈跟踪:

  • 我的XML输入: 我的XML输出:

  • 类定义为: 要加载的xml示例部分: 我创建了一个验证收集器,以显示针对架构解封xml文件过程中所有验证错误,但结果令人困惑:验证收集器将继承我的RemoteHost的每个类的验证错误显示为: 元素“host firstsubtype”不能有字符或元素信息项[children],因为该类型的内容类型为空。 元素“Other HostType”必须没有字符或元素信息项[childrens],因为该类