Hello, I had to tackle the COLLADA problem a month ago, so I can offer my experience
I have 5 structs which work together:
COLLADA - The main class holding everything together, contains arrays and methods to use the following classes...
MESH - The class containing the vertices, texture coords, faces, and a method to render them
CONTROLLER - Reads the matrices for binding and skinning
ANIMATION - This simply contains the animated matrices and methods to bind them to a skeleton
BONE - A simple class with 2 matrices, a local matrix, and a world matrix. These have children bones and a parent bone.
Now, to the vertex weights -
Every vertex is bound to 1 or more bones, so <vcount> is actually bone count per vertex, the following:
1, 3, 1, 2, 3, 4, 1, 2
would mean the first vertex in the mesh is bound to 1 bone, the second vertex is bound to 3 bones, etc
and <v> is the actual data for that binding, using the counts listed above, <v> would be layed out like:
[vertex 1: boneindex, bone weight]
[vertex 2: boneindex, boneweight, boneindex, boneweight, boneindex, boneweight]
[vertex 3: boneindex, boneweight]
[vertex 4: boneindex, boneweight, boneindex, bonewieight]
I hope I could help. My skype name is on my profile name if you need any more help!