Use the following helper method which decomposes any Matrix into a set of position, rotation and scale that can be used directly with a SpriteBatch. It's basically a wrapper around the existing Matrix.Decompose method but making it SpriteBatch friendly:
public static void DecomposeMatrix(ref Matrix matrix, out Vector2 position, out float rotation, out Vector2 scale)
{
Vector3 position3, scale3;
Quaternion rotationQ;
matrix.Decompose(out scale3, out rotationQ, out position3);
Vector2 direction = Vector2.Transform(Vector2.UnitX, rotationQ);
rotation = (float) Math.Atan2(direction.Y, direction.X);
position = new Vector2(position3.X, position3.Y);
scale = new Vector2(scale3.X, scale3.Y);
}
It should be pretty straightforward, but here's an example of how to use the method above:
Matrix transform = /* The transform of your sprite */
Vector2 position, scale;
float rotation;
DecomposeMatrix(ref transform, out position, out rotation, out scale);
spriteBatch.Draw(texture, position, null, Color.White, rotation, Vector2.Zero, scale, SpriteEffects.None, 0.0f);
Notice how the origin parameter is left as Vector2.Zero in the example. This is because I usually already embed the origin transformation into the matrix, so the resulting position already includes it.
For more information on the subject of implementing a sprite hierarchy in XNA, I will simply leave two links to related answers of mine: