私はXMLを更新する関数を書いていますが、いくつかの問題があります。私はちょうど更新されたものに古いXElementを設定することができますが、それはforeachループでは機能しません(ただ1つのクエリ結果であるべきです)。私は各フィールドをハードコードするつもりでしたが、ループを使うことに決めました。しかし、それは部分に当たると、それはサブ要素だとき、それは単一の要素としてそれをすべて読み込み、ファイルを台無し複雑なXMLでデータを更新する
var myDevice = from c in appDataXml.Descendants("device")
where (string)c.Element("name") == App.CurrentDeviceName
&& (string)c.Element("ip") == App.CurrentIp
select c;
if (myDevice.Any())
{
foreach (XElement device in myDevice)
{
//device.Element("customname").Value = updatedDevice.Element("customname").Value;
for (int a = 0; a < device.Elements().Count(); a++)
{
string field = device.Elements().ElementAt(a).Name.ToString();
device.Element(field).Value = updatedDevice.Element(field).Value;
}
}
}
サンプルXMLあなたがXElement.Value
を使用しますが、上の反復べきではありません
<Devices>
<device>
<name>blah</name>
<customname>custom</customname>
<ip>192.168.1.100</ip>
<port>1000</port>
<sources>
<source>
<code>00</code>
<name>blah2</name>
<hidden>False</hidden>
</source>
<source>
...etc
</sources>
</device>
これは、Windows Phone 7のプロジェクトであることが重要であるように見えます。エクステンダーの使用がTypePadで実装されていないと思われます – Jason
自分で試してみてください:http:// msdn.microsoft.com/en-us/library/ayybcxe5.aspx –
または、例えばGetInt()、GetInt()などの 'GetString()'を使う 'GetInt()'、 'GetBool {return Convert.ToInt32(GetString(...)); } ' –