2012-12-11 64 views
4

我正在阅读一些XML数据(如果您熟悉FXG文件)。数据如何让JAXB中的unmarshaller忽略XML根元素名称?

部分已改变标签名称:

<varying_name1 scaleX="1.0046692" x="177.4" y="74.2"/> 
<varying_name2 scaleX="1.0031128" x="171.9" y="118.9"/>  

我创建了一个名为变换到不同的标签名段内代表了数据类。在我的JAXB类来保存数据,我有:

@XmlAnyElement(lax=true)  
@XmlJavaTypeAdapter(TransformAdapter.class)  
protected List<Transform> transforms; 

在我的适配器,我试图解组数据:

JAXBContext context = JAXBContext.newInstance(Transform.class); 
Unmarshaller unmarshaller = context.createUnmarshaller(); 
Transform result = (Transform) unmarshaller.unmarshal(v); 

但是,我的代码在这里抛出一个异常,因为在根名字我元素变化。这不是一个常数。我得到:

unexpected element (uri:"http://ns.adobe.com/fxg/2008", local:"m6_mc"). Expected elements are (none) 

我该如何才能解开我的数据,就好像根元素具有预期的名称一样?

回答

7

默认情况下,JAXB(JSR-222)实现将根据根元素确定要解组的类。这与通过@XmlRootElement@XmlElementDecl注释提供的元数据匹配。

或者你是采用类参数的解组方法之一。这告诉JAXB你希望解组到哪个类。解组的结果将是JAXBElement的一个实例,除了Java对象将包含根元素信息以防万一需要它之外。

JAXBContext context = JAXBContext.newInstance(Transform.class); 
Unmarshaller unmarshaller = context.createUnmarshaller(); 
Transform result = unmarshaller.unmarshal(v, Transform.class).getValue(); 
+1

我不明白为什么第二次提供类参数告诉它忽略根元素,但是,它的工作原理!我应该复制你的例子,我更密切地下载了一下。 – Joe

+1

@Joe - 我已经扩大了我的答案,希望这有助于澄清事情。 –

+1

谢谢,Blaise! – Joe