参照される要素の型がわからない場合、参照をどのように処理しますか?
<input>
データシンクである要素があります。この要素には、データの取得元を指定する ( による参照)<input>
属性があります。によって参照される要素は、複数の要素の 1 つである可能性があります。source
XmlIDREF
source
これは私が使用しているテストドキュメントの例です. は<input>
時々要素を参照し、時には a をsource
参照します.<source>
<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>
を参照したい2行目は 、3行目は2番目の要素を参照します。<vertices>
null
<source>
Input
代わりにフィールドを持つように変更する場合は、代わりにandVertices source
を取得します。意味あり。null
Vertices vertex
null
これを処理するには、Java コードをどのように構成すればよいでしょうか?
XmlAdapter を調べたところ、クラスInput
にフィールドObject source
またはMySuperClass source
(およびその両方Source
とVertices
サブクラスを作成) を与えるかJAXBElement source
、アダプター コードで変換を試みることができると考えましたが、id 参照を保持するにはどうすればよいでしょうか?
工場での使用法を調べましXmlType
たが、それは私が探しているものではないようです。または、最初は良い候補のように聞こえますが、少なくともそれがどのように適用されるかわかりません。
関連する用語をグーグルで検索すると、他の人が持っていた関連のないあらゆる種類の参照の問題が発生しました。
私は、それがどのように行われたとしても、1)Source
と(およびそのフィールドで参照できるVertices
他のすべてのもの) のうちの 1 つが真でなければならないと考えています。共通のスーパークラスを拡張する必要があります。または 2) aと a (など) があり、そのうちの 1 つは何かを参照し、他のすべては null になります。Input
source
Input
Source source1
Vertices source2
ClassN sourcen
すべてのデータをアンマーシャリングし、参照を保持してすべての情報を取得できる限り、これら 2 つのシナリオのいずれでも問題ありません。また、別のシナリオでも問題ありません。非整列化する適切な方法がわかりません。
取得したxmlを制御できません。xml ドキュメントは他のプログラムによって作成され、スキーマは大きな仕様 ( http://www.khronos.org/files/collada_spec_1_4.pdf ) に従っています。xml をアンマーシャリングし、それらのファイルのデータを使用するために必要な Java コードのみを記述しています。
私は昨夜jaxbを使い始めたばかりで、うまく機能しています(開発者に再び称賛を送りたい)が、このようないくつかの長引く問題がまだ解決しなければならない.