【问题标题】:Deserialising XML file into a Java object using JAXB使用 JAXB 将 XML 文件反序列化为 Java 对象
【发布时间】:2013-06-06 19:58:47
【问题描述】:

我对 XML 序列化和处理完全陌生。 我正在做一个项目,我有一堆需要读取和反序列化为对象的 XML 文件。由于我以前从未处理过 XML 文件,因此我尝试在 stackoverflow 上阅读此处并想出了一些代码。有些有效,有些无效,我不明白为什么。

我的 XML 文件看起来像这样(还有更多动作,但你明白了):

<MovementCards>
    <MovementCard>
        <movements>
            <int>3</int>
            <int>3</int>
            <int>2</int>
            <int>2</int>
            <int>2</int>
            <int>2</int>
        </movements>
    </MovementCard>
</MovementCards>

这些是我的课程:

@XmlRootElement(name="MovementCards")
public class MovementCards {
    private List<MovementCard> movementCards;

    @XmlElement(name="MovementCard")
    public List<MovementCard> getMovementCards() {
        return this.movementCards;
    }
    public void setMovementCards(List<MovementCard> movementCards) {
        this.movementCards = movementCards;
    }
}

public class MovementCard extends Card {
    @XmlElement(name="movements")
    private int[] movements = new int[FamilyGameManager.NUMBER_OF_TRACKS];

    public int[] getMovements() {
        return movements.clone();
    }

    public void setMovements(int[] movements) {
        this.movements = movements;
    }
}

最后这是我写的函数:

public List<MovementCard> generateMovementCards() {
        List<MovementCard> list = new ArrayList<MovementCard>();
        try {
            File file = new File(MovementCardsFile);
            JAXBContext jaxbContext = JAXBContext.newInstance(MovementCards.class);

            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();


            MovementCards movementCards = (MovementCards) jaxbUnmarshaller.unmarshal(file);

            list = movementCards.getMovementCards();
        } 
        catch (JAXBException e) {
            e.printStackTrace();
        }
        return list;
    }

提前致谢。

【问题讨论】:

  • 你想要完成什么,具体是什么不起作用?
  • @Jacinda 我正在尝试使用 ArrayList 获取对象 MovementCards,并且每个 MovementCard 需要有一个由六个整数组成的数组(int[] 运动)。根据我发布的 XML,我应该得到一个运动卡的列表,这个运动卡的动作应该是 [3, 3, 2, 2, 2, 2]。我尝试调试这部分,它根本没有填充数组。它留下六个零。

标签: xml jaxb xml-deserialization unmarshalling


【解决方案1】:

您可以执行以下操作:

@XmlElementWrapper(name="movements")
@XmlElement(name="int")

更多信息

【讨论】:

  • 非常感谢,布莱斯!我使用您的教程将我的对象编组为 Xml 以查看发生了什么,然后我调整了我已经编写的内容。这很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多