please help the c# script for unity convert all incoming xml vectors into unity vectors and transforms or w/e.

using System.Collections.Generic;
using System.IO;
using System.Xml;
using UnityEngine;

public class AvatarBoneSetter : MonoBehaviour
{
    public GameObject armature; // Assign your armature GameObject in the inspector.
    public string xmlFilePath = "path_to_your_xml_file.xml"; // Update this path accordingly.

    // XML Structure Information
    private class TransformData
    {
        public string Name;
        public Vector3 Position;
        public Quaternion Rotation = Quaternion.identity; // Default rotation
        public Vector3 Scale = Vector3.one; // Default scale
    }

    private void Start()
    {
        // Load the XML file
        string xmlContent = LoadXmlFile(xmlFilePath);
        if (xmlContent != null)
        {
            // Parse the XML and apply transforms
            List<TransformData> transforms = ParseXml(xmlContent);
            ApplyTransforms(armature.transform, transforms);
        }
    }

    private string LoadXmlFile(string path)
    {
        string fullPath = Path.Combine(Application.streamingAssetsPath, path);
        if (File.Exists(fullPath))
        {
            return File.ReadAllText(fullPath);
        }
        else
        {
            Debug.LogError("XML file not found: " + fullPath);
            return null;
        }
    }

    private List<TransformData> ParseXml(string xmlContent)
    {
        List<TransformData> transformDataList = new List<TransformData>();

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(xmlContent);

        XmlNodeList bones = xmlDoc.SelectNodes("//bone");

        if (bones != null)
        {
            foreach (XmlNode bone in bones)
            {
                if (bone.Attributes["name"] != null)
                {
                    TransformData data = new TransformData
                    {
                        Name = bone.Attributes["name"].Value,
                        Position = ParseVector3(bone.Attributes["position"]?.Value ?? "0 0 0"), // Fallback to zero position
                        Rotation = Quaternion.Euler(ParseVector3(bone.Attributes["rotation"]?.Value ?? "0 0 0")), // Fallback to zero rotation
                        Scale = ParseVector3(bone.Attributes["scale"]?.Value ?? "1 1 1") // Fallback to default scale
                    };
                    transformDataList.Add(data);
                }
            }
        }

        return transformDataList;
    }

    private Vector3 ParseVector3(string value)
    {
        string[] values = value.Split(new char[] { ' ' }, System.StringSplitOptions.RemoveEmptyEntries);
        if (values.Length != 3)
        {
            Debug.LogError("Invalid Vector3 format: " + value);
            return Vector3.zero;
        }

        // Ensure safe parsing
        float x = float.TryParse(values[0], out x) ? x : 0f;
        float y = float.TryParse(values[1], out y) ? y : 0f;
        float z = float.TryParse(values[2], out z) ? z : 0f;

        return new Vector3(x, y, z);
    }

    private void ApplyTransforms(Transform parent, List<TransformData> transforms)
    {
        foreach (TransformData data in transforms)
        {
            Transform child = FindChildByName(parent, data.Name);
            if (child != null)
            {
                child.localPosition = data.Position;
                child.localRotation = data.Rotation;
                child.localScale = data.Scale;
            }
            else
            {
                Debug.LogWarning("Child not found: " + data.Name);
            }
        }
    }

    private Transform FindChildByName(Transform parent, string name)
    {
        if (parent.name == name)
        {
            return parent;
        }

        foreach (Transform child in parent)
        {
            Transform found = FindChildByName(child, name);
            if (found != null)
            {
                return found;
            }
        }

        return null;
    }
}