我目前正在尝试为基于XML的collada(.dae)文件创建导入程序。我将xml文件反序列化为可以轻松访问的对象。 例如,.dae文件可能有这样的设置......
Picasso.with(this)
.load(url)
.networkPolicy(NetworkPolicy.OFFLINE)
.into(imageView);
然后以类似的方式对其进行反序列化(使用xmlSerializer.Deserialize)。所以要访问“网格”中的第二个“源”,我会做library_geometries.geometry [0] .mesh.source [1];
一切都很好,我遇到的问题很容易遍历这个反序列化的xml文档。
例如,在“顶点”中有一个source =“#Cube1s_008-mesh-positions”,它基本上意味着“访问顶点数据,转到id为”Cube1s_008-mesh-positions“”的源。我想要做的是轻松地从顶点直接到具有该id的源或任何东西。 所以它看起来像library_geometries.geometry [0] .mesh.vertices.GoToSource();并且我可以做library_geometries.geometry [0] .mesh.vertices.GoToSource()。float_array.values;
我假设我需要用反射来做这件事。 也许搜索具有[XmlAttribute(“id”)]的任何字段,然后以某种方式返回其正确类型的对象。 任何想法都表示赞赏。
答案 0 :(得分:0)
您可以使用两种基本方法。
1) Build a dictionary
2) Add a new property Geometry geometry to the class veritices which is NonSerialize. After deserialize, enumerate through the classes adding the value to the property geometry.

答案 1 :(得分:0)
这就是我喜欢词典的原因。我经常使用类似下面的类来嵌套结构。
> nil + 2
=> #<NoMethodError: undefined method `+' for nil:NilClass>
>
&#13;