我目前正在尝试为基于XML的collada(.dae)文件导入一个导入程序。我将xml文件反序列化到可以轻松访问的对象中。 例如,.dae文件可以具有这样的设置...如何轻松遍历反序列化的Xml文档?
<library_geometries>
<geometry id="Cube1s_008-mesh" name="Cube1s.008">
<mesh>
<source id="Cube1s_008-mesh-positions">
<float_array ...... />
</source>
<source id="Cube1s_008-mesh-normals">
</source>
<vertices id="Cube1s_008-mesh-vertices">
<input semantic="POSITION" source="#Cube1s_008-mesh-positions"/>
</vertices>
</mesh>
</geometry>
<geometry>
....
</geometry>
</library_geometries>
据(与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”)]的字段,然后以某种方式返回其正确类型的对象。 任何想法表示赞赏。
你的第二个方法类似于我一直在做的事情。我在名为“sourceElement”的顶点类中添加了一个变量,这个变量可以直接引导我指向这个顶点所指向的源元素。要设置它,我必须做反射,获取所有源,找到顶点指向的源并将其分配给sourceElement变量。问题是,我需要为具有ID属性的每种元素执行此操作。然后我开始试图获取任何具有ID属性并存储它的内容,但是当它存储时,它是一个对象,并且不会以正确的类型存储,从而使其不可用 – HiddenMonk