What does your data feed look like? If it includes the position they're playing, you could skip the extra objects and just pull it from the position. nI'm going to display my lack of knowledge of soccor, by only using two positions in my example, but here goes.
So if someone is playing forward, is there an "F" or "forward" or anything unique to that position that you can use? Same for say goalie. If there is, you can use a script to find their position they play, then place them based on that.
Start by placing all of the players' objects in their own groups. Photos, names, any graphics that need to move with them, etc. Call them "Player 1," "Player 2," etc... Make sure that in that group, you put a number after each of them "name 1," "position 1," "graphic 1," etc. This makes scripting way easier, as you can use a loop to build it out.
dim player as xpBaseObject
dim position as xpTextObject
dim i as Integer
'this part will cycle through all of the player groups and place them individually
for i = 1 to x (how many players you'll be doing)
Self.GetObjectByName("Payer " & i, player)
Self.GetObjectByName("Position " & i, position)
if InStr(Ucase(position.Text), "F") = 1 then 'if your data uses something else for that position, just change out the F
player.PosX='whatever your X value is for forward
player.PosY='whatever your Y value is for forward
elseif InStr(Ucase(position.Text), "G") = 1 then
player.PosX='X value for goalie
player.PosY='Y value for goalie
and on and on for each position until
end if
next i#XPression