You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中编辑包含多数值的单行XML range元素?

解决C#修改XML中range元素(空格分隔双精度值)的问题

问题原因

你遇到的问题是直接将二维double数组传递给SetElementValue方法,该方法会调用对象的默认ToString()方法,而二维数组的ToString()返回的是类型名称System.Double[,],而非你需要的空格分隔数值字符串。

解决方案

1. 修改range的全部数值

直接将目标数值拼接为空格分隔的字符串,再赋值给range元素:

XDocument xdoc = XDocument.Load(@"G:/My Drive/File.xml");

// 存储两个目标值(用一维数组或单独变量都可以)
double[] newRange = { 0.1745, 1.3963 };
// 或者 double minVal = 0.1745, maxVal = 1.3963;

var targetCoordinate = xdoc.Root.Descendants("objects")
                           .Elements("PinJoint")
                           .Descendants("coordinates")
                           .Elements("Coordinate")
                           .FirstOrDefault(x => x.Attribute("name").Value == "revolute_angle");

if (targetCoordinate != null)
{
    // 将数值转为空格分隔的字符串
    targetCoordinate.SetElementValue("range", string.Join(" ", newRange));
    // 若用单独变量则写:string.Join(" ", minVal, maxVal)
    xdoc.Save(@"G:/My Drive/File.xml");
}

2. 修改range的单个数值

先读取现有range的数值,修改其中一个后重新拼接赋值:

XDocument xdoc = XDocument.Load(@"G:/My Drive/File.xml");

var targetCoordinate = xdoc.Root.Descendants("objects")
                           .Elements("PinJoint")
                           .Descendants("coordinates")
                           .Elements("Coordinate")
                           .FirstOrDefault(x => x.Attribute("name").Value == "revolute_angle");

if (targetCoordinate != null)
{
    XElement rangeElement = targetCoordinate.Element("range");
    if (rangeElement != null && !string.IsNullOrWhiteSpace(rangeElement.Value))
    {
        // 分割现有值为两个double
        string[] currentVals = rangeElement.Value.Split(' ', StringSplitOptions.RemoveEmptyEntries);
        if (currentVals.Length == 2 
            && double.TryParse(currentVals[0], out double currentMin) 
            && double.TryParse(currentVals[1], out double currentMax))
        {
            // 修改单个值,比如修改最小值为0.2
            currentMin = 0.2;
            // 或修改最大值:currentMax = 1.4;

            // 重新赋值
            rangeElement.Value = string.Join(" ", currentMin, currentMax);
            xdoc.Save(@"G:/My Drive/File.xml");
        }
    }
}

关键说明

SetElementValue方法会把传入的对象直接转为字符串,因此必须手动将数值数组/变量拼接成符合XML格式要求的空格分隔字符串,才能得到正确的range元素内容。

内容的提问来源于stack exchange,提问作者Andrés

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:25:24