【问题标题】:JAXB: Is it possible to handle unknown elementsJAXB:是否可以处理未知元素
【发布时间】:2012-06-08 16:07:25
【问题描述】:

我得到这样的 xml 内容:

<data>
   <randomtagname>
      <name>....</name>
      <description>.....</description>
      <description>.....</description>
   </randomtagname>
   <anotherrandomtagname>
      <name>....</name>
      <description>.....</description>
   </anotherrandomtagname>
   <thirdridiculousrandomtagname>
      <name>....</name>
      <description>.....</description>
      <description>.....</description>
   </thirdridiculousrandomtagname>
       .
       .
       .
</data>

是否可以创建一个带注释的 java 类并使用 jaxb 来取消/编组此文件而不使用 @XmlAnyElement??

【问题讨论】:

  • 您的源 xml 是否如此未定义以至于您可以提取 XSD?如果你可以提取 xsd,你可以构建类 java 并且不需要担心这个......如果不能(不可能 XSD 提取)为什么不应用 DOM?
  • 随机标签名即可!每次我得到并需要解析它们时都会有所不同。所以我不知道是否可以生成 xsd。但是我不想在 xml 的内容发生变化时一直更改我的代码,因为 radnom 标签的内部结构仍然是一样的
  • @spaeth:到 dom 部分:我想避免手动 dom 解析。但是,看来我这次运气不好。

标签: java tags jaxb


【解决方案1】:

在我看来,它就像一个对象列表。制作一个具有

的 java 类
 List&lt;Object&gt; data
变量。你不应该需要注释。

基本上,您希望您的 xml 接口足够通用,以接受可能具有不同字段的不同对象的列表。一旦这个接口接受了一个 java 对象列表,它就由你的 java 代码来确定它们是什么并将它们转换为正确的类类型。对该部分使用 instanceOf。其中一些在 java 泛型中进行了描述,您可以在其中传递任何对象,但您必须确定它是什么来转换它。我认为只要它以真正的类形式发送,instanceof 就可以工作。您不会发送对象列表,而是发送字符串、整数或自定义类(如 Myclass1、Myclass2)的列表。然后,一旦您阅读了该列表,请使用 instanceof 来确定列表中每个对象的对象类型,它是 String、Myclass1、Myclass2 等的实例...并适当地进行转换。

仔细阅读您的问题,我可能会错过您真正需要知道的内容。也许这个链接有一些有用的东西。 jaxb help

【讨论】:

  • 但是在这种情况下什么是对象?我仍然不明白如何识别单个“对象”以转换为任何其他类来做某事,例如 myObject.getName() 或 myObject.getDescription()[0]。
  • 这里的对象可以是任何类型的 java 对象。您可以在列表中有不同的对象,要转换它们,您可以使用 instanceOf 来确定它是什么类型的对象。 if obj1.instanceOf(MyClass1.class) MyClass1 objcl1 = (MyClass1) obj1;
  • 当然,我知道。所以你说在这种情况下我应该自己做 dom 解析?像 spaeth 提到的?在这种特殊情况下不要使用 jaxb?
  • 如果您无权访问创建文件时使用的类,则可能需要这样做。我已经将 java sax 解析器用于类似的东西。我读到它比 dom 解析器好。
  • 其实看你的优先级了以结构化的方式(更准确地说是树)。由于这个原因,SAX 适用于大文档,但不像 DOM 那样容易访问数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多