I think you are confusing matrix chains for use in bone and skeletal systems with transformation matrices used for positioning objects. If you want to position an object at x,y,z then you create a translation matrix that will translate the object to x,y,z.
For D3D:
1,0,0,x
0,1,0,y
0,0,1,z
0,0,0,1
Code:
void CGameObject::TransformObject(D3DXVECTOR3 vecWorldPos,
D3DXVECTOR3 vecScale,
D3DXVECTOR3 vecLocalRot)
{
//Setup matrix variables
D3DXMATRIX matWorld,matTrans,matLocalRot,matScale;
//Setup model space or local rotation matrix
D3DXMatrixRotationYawPitchRoll(&matLocalRot,vecLocalRot.x,vecLocalRot.y,vecLocalRot.z);
//Setup scaling matrix
D3DXMatrixScale(&matScale,vecScale.x,vecScale.y,vecScale.z);
//Setup translation matrix (moves object to its world position)
D3DXMatrixTranslation(&matTrans,vecWorldPos.x,vecWorldPos.y,vecWorldPos.z);
//Create final world matrix
matWorld=matScale*matLocalRot*matTrans);
//Use shared D3D device pointer to set world transform
m_spDevice->SetTransform(D3DTS_WORLD,&matWorld);
}
This method is not foolproof as it does not take into account gimbal lock. A more correct approach would either be to use axis-angle rotations or quaternions to avoid the gimbal lock issue. In my system I have a special class called COrient3D which is responsible for all 3D orientations and representations. Every object has it's own COrient3D object which makes handling rotations centralized to one particular class.