0

これは、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>
4

2 に答える 2

1

2つの問題があります。

を取得している理由NullReferenceExceptionは、が と呼ばれるルート要素xml.Element("statrecords")を見つけようとするのに対し、ルート要素は と呼ばれます。statrecordsstats

2 つ目の問題は、要素の値を設定しようとしているのに、属性の値を変更したいので、 を使用する必要があること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>
于 2013-01-28T15:18:04.517 に答える
0

この場合に使用するxml.Element()と、ルート要素を取得します。したがって、Descendants()SetAttributeValue()メソッドを使用する必要があります。

var elements = xml.Descendants( "stats" ).Elements( "statrecords" ).ToList(); 
//becuase you can have multiple statrecords
elements[0].SetAttributeValue("value", "2" ); 
于 2013-01-28T15:48:07.240 に答える