Here is my XML sample. I want to select SystemSetting’s value if ID = 123. But I can’t figure out how. How can I select SystemSetting value if id’s value equal to 123 ?
<?xml version="1.0" encoding="utf-8" ?>
<Private>
<System>
<ID>123</ID>
<NAME>Test</NAME>
<SystemSetting>128</SystemSetting>
<SystemSettingCS>127</SystemSettingCS>
</System>
<System>
<ID>124</ID>
<NAME>Test2</NAME>
<SystemSetting>128</SystemSetting>
<SystemSettingCS>127</SystemSettingCS>
</System>
<System>
<ID>0</ID>
<NAME>Test</NAME>
<SystemSetting>5</SystemSetting>
<SystemSettingCS>250</SystemSettingCS>
</System>
</Private>
Here’s what I tried:
var doc = XDocument.Load(Application.StartupPath+ @"\Settings.xml");
var q = from Ana in doc.Descendants("Private")
from sistem in Ana.Elements("System")
where (int)sistem.Element("ID") == 123
from assetText in Sistem.Elements("System")
select assetText.Element("SystemSetting");
MessageBox.Show(q.ToString());
thnx for help.
I think you’re making this more complicated than you need to. I think you just need:
That will select the first matching element, admittedly. The type of
queryis thenXElement; if you take off theFirstOrDefault()part, it will return anIEnumerable<XElement>, for all matching elements.If you want just the value instead of the element, you can change the
Selectto:or
(The first will return
nullif there’s noSystemSettingelement; the second will throw an exception.)