这是我更改XML元素属性值的方法:
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
XDocument xml = null;
using (IsolatedStorageFileStream isoFileStream = myIsolatedStorage.OpenFile("Stats_file.xml", FileMode.Open, FileAccess.Read))
{
xml = XDocument.Load(isoFileStream, LoadOptions.None);
xml.Element("statrecords").SetElementValue("value", "2"); //nullreferenceexception
}
using (IsolatedStorageFileStream isoFileStream = myIsolatedStorage.OpenFile("Stats_file.xml", FileMode.Truncate, FileAccess.Write))
{
xml.Save(isoFileStream, SaveOptions.None);
}
}
在第7行,我有NullReferenceException。你知道如何在没有错误的情况下改变价值吗?
这是我的XML文件:
<?xml version='1.0' encoding='utf-8' ?>
<stats>
<statmoney index='1' value='0' alt='all money' />
<statrecords index='2' value='0' alt='all completed records' />
</stats>
答案 0 :(得分:1)
有两个问题。
您获得NullReferenceException
的原因是xml.Element("statrecords")
将尝试查找名为statrecords
的 root 元素,而根元素称为stats
{1}}。
第二个问题是您尝试设置元素值,而您想要更改属性值,因此您应该使用SetAttributeValue
我想你想要:
xml.Root.Element("statrecords").SetAttributeValue("value", 2);
编辑:我给出的代码可以正常使用您提供的示例XML。例如:
using System;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
var xml = XDocument.Load("test.xml");
xml.Root.Element("statrecords").SetAttributeValue("value", 2);
Console.WriteLine(xml);
}
}
输出:
<stats>
<statmoney index="1" value="0" alt="all money" />
<statrecords index="2" value="2" alt="all completed records" />
</stats>
答案 1 :(得分:1)
如果在这种情况下使用xml.Element()
,则会获得根元素。因此,您应该使用Descendants()
和SetAttributeValue()
方法:
var elements = xml.Descendants( "stats" ).Elements( "statrecords" ).ToList();
//becuase you can have multiple statrecords
elements[0].SetAttributeValue("value", "2" );