当您不知道引用的元素类型是什么时,您如何处理引用?
我有一个元素<input>
是数据接收器。该元素<input>
具有一个属性,该属性source
指定(引用XmlIDREF
)数据来自何处。引用的元素source
可以是多个元素之一。
这是我正在使用的测试文档中的一个示例,其中<input>
'source
有时引用一个<source>
元素,有时引用 a <vertices>
(这些不一定是它可以引用的唯一元素):
<source id="position">
<float_array id="arrayPosition" count="78">...</float_array>
...
</source>
<source id="normal">
<float_array id="arrayNormal" count="144">...</float_array>
...
</source>
<vertices id="vertex">
<input semantic="POSITION" source="position"/>
</vertices>
<polylist material="MyMaterial" count="40">
<input semantic="VERTEX" source="vertex" offset="0"/>
<input semantic="NORMAL" source="normal" offset="1"/>
...
</polylist>
如果我做
class Input
{
Source source;
}
那么所有对<source>
元素的引用都可以正常工作,但对于其余元素,它们的来源是null
. 也就是说,如果我要设置一个toString()
来显示类和 id 并打印上面的输入,我会得到
Source: position
null
Source: normal
第一行将正确引用第一个<source>
元素,第二行,我想引用该<vertices>
元素,将是null
,第三行将引用第二个<source>
元素。
如果我要Input
改为拥有一个字段Vertices source
,那么我会得到null
Vertices vertex
and null
。这是有道理的。
我将如何构建我的 Java 代码来处理这个问题?
我研究了 XmlAdapter,想也许我可以给类Input
一个字段Object source
或MySuperClass source
(并同时创建它Source
的Vertices
子类)或者JAXBElement source
然后尝试在适配器代码中转换东西,但是我将如何保留 id 引用?
我调查了XmlType
工厂的使用情况,但这似乎根本不是我想要的,或者至少我不知道它是如何应用的,尽管它起初听起来像是一个很好的候选人。
谷歌搜索相关术语会产生其他人遇到的各种不相关的引用问题。
我在想,无论怎么做,两件事中的一件都必须是真实的:1)Source
和(以及可以用它的字段引用的Vertices
所有其他东西)必须扩展一个通用的超类。或 2)将有 a和 a (等等,to ),其中 1 个将引用某些东西,而所有其他都将为空。Input
source
Input
Source source1
Vertices source2
ClassN sourcen
我对这两种情况以及替代方案都很好,只要它解组所有数据并保留引用,以便我可以获得所有信息。我只是想不出将其解组的正确方法。
我无法控制我得到的 xml。xml 文档是由其他程序创建的,并且架构遵循大型规范 ( http://www.khronos.org/files/collada_spec_1_4.pdf )。我只是在编写解组 xml 并使用这些文件中的数据所需的 Java 代码。
我昨晚刚开始使用 jaxb,效果很好(再次向开发人员致敬),但是还有一些像这样的挥之不去的事情我仍然需要解决。