java - session 树 xml 表示为 java 对象

标签 java xml graph tree jaxb

我对将对话树映射到 Java 对象的推荐方法有疑问。我正在查看类似以下的内容:

<conversation>
    <npcAction id="1" text="Some action text" userChoice="2" />
    <userChoice id="2">
        <availableAction>3</availableAction>
        <availableAction>4</availableAction>
    </userChocie>
    <userAction id="3" text="Some more action text." npcChoice="5" />
    <userAction id="4" text="Different action text." npcChoice="5" />
    <npcChoice id="5">
        <availableAction>6</availableAction>
        <availableAction>7</availableAction>
    </npcChoice>
    <npcAction id="6" text="Still more action text." userChoice="8" />
    <npcAction id="7" text="Still more action text." userChoice="8" />
    <userChoice id="8" />
</conversation>

然而,当我想像我想如何以编程方式与之交互时,我觉得我想做这样的事情:

public class UserAction {
    String text;
    NpcChoice npcChoice;
}
public class NpcAction {
    String text;
    UserChoice userChoice;
}
public class UserChoice {
    ArrayList<UserAction> actions;
}
public class NpcChoice {
    ArrayList<NpcAction> actions;
}

在实现中,NpcAction 和 UserAction 具有其他区分它们的特定值,但为了简单起见,我将它们缩减了。

我的问题是是否有一种简单的方法可以将这些表示绑定(bind)在一起。我可以制作一些 xml 数据的中间对象表示,然后用 Java 手动重新映射它,但我觉得我缺少一些关于表示此信息的最佳方式的东西。任何建议将不胜感激!

最佳答案

您可以执行以下操作:

用户操作

public class UserAction {
    @XmlID 
    @XmlAttribute
    String id;

    @XmlAttribute String text;
    @XmlIDREF NpcChoice npcChoice;
}

NpcAction

public class NpcAction {
    @XmlID 
    @XmlAttribute
    String id;

    String text;
    UserChoice userChoice;
}

用户选择

public class UserChoice {
    @XmlID 
    @XmlAttribute
    String id;

    @XmlElement(name="availableAction")
    ArrayList<UserAction> actions;
}

NpcChoice

public class NpcChoice {
    @XmlID 
    @XmlAttribute
    String id;

    @XmlElement(name="availableAction")
    ArrayList<NpcAction> actions;
}

了解更多信息

关于java - session 树 xml 表示为 java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8068266/

相关文章:

java - GenericObjectPool 中的过期 session

java - 将对象转换为 map : Cast vs ObjectMapper

xml - 列出SSIS包中所有 "Execute SQL Task"的SqlStatementSource

java - Spring MVC : Controller does not run in an ApplicationContext

graph - allegrograph 和五列 mysql 表有什么区别?

java - 绘制图形节点的坐标算法

java - 复制和增强对象的最佳实践(设计模式)

android - 开关按钮拇指歪斜?

android - 在 AChartEngine 的次 Y 轴上绘制多个图形

java - 在 JVM 上启用逃逸分析的经验