XElement.SetElementValue覆盖元素

本文关键字:元素 覆盖 SetElementValue XElement | 更新日期: 2023-09-27 18:26:52

我有以下结构:

<Root name="jack">
     <Ele1>4</Ele1>
     <Ele2>4</Ele2>
     <Ele3>4</Ele3>
     <Ele4>4</Ele4>
</Root>

我想修改一些值,所以我使用以下代码:

XElement root1 = new XElement("Root");
root1.SetAttributeValue("name", "jack");
root1.SetElementValue("Ele1", 1);
root1.SetElementValue("Ele2", 2);
root1.SetElementValue("Ele3", 3);

这样做的结果是一种新的结构:

<Root name="jack">
     <Ele3>3</Ele3>
</Root>

如果我在设置Ele2的值后打印root1 Debug.Log(root1),结果是:

<Root name="jack">
     <Ele2>2</Ele2>
</Root>

如果我在设置Ele1的值后分别这样做。

我正在使用C#;Unity3D的MonoDevelop

XElement.SetElementValue覆盖元素

Unity3D似乎有问题,因为它是一个非常简单的代码。就像我说的,结构就在那里,所以我可以先阅读,而不是直接修改。从xml文件中读取root1后我所做的工作

string name;
foreach ( XElement ele in root1.Elements() ){
    name = ele.Name.LocalName;
    if ( !doNotChange.Contains (name) )
        ele.SetValue ( PlayerPrefs.GetInt( name ) );
}
        

其中doNotChange是一个字符串列表,其中包含那些我不需要修改的元素。我真的不知道为什么SetElementValue不能在Unity3D中工作,而SetValue可以。我已经向Unity3D报告了。我会用他们的答案编辑帖子。

编辑:Unity QA团队回答我

嘿,

我们已经能够重现这个错误,并已将其发送给我们的开发人员进行解决。

我们高度赞赏你的贡献。如果您还有其他问题,请随时与我们联系。