Используйте linq-to-xml, следующий код:
var xml_str = @"<sets version=""2.0"">
<setting>
<id>set1</id>
<value>80</value>
<label>EVersion</label>
<type>Val</type>
<format>R</format>
<bits>
<addr>0</addr>
<startBit>0</startBit>
<bitWidth>8</bitWidth>
</bits>
</setting>
<setting>
<id>set3</id>
<value>50</value>
<label>GVersion</label>
<type>Bin</type>
<format>R</format>
<bits>
<addr>0</addr>
<startBit>0</startBit>
<bitWidth>8</bitWidth>
</bits>
</setting>
</sets>";
var doc = XDocument.Parse(xml_str);
var settings = new XElement("sets",
from setting in doc.Element("sets").Elements("setting")
select new XElement("setting", setting.Element("id"), setting.Element("value")));
Console.WriteLine(settings);
печатает:
<sets>
<setting>
<id>set1</id>
<value>80</value>
</setting>
<setting>
<id>set3</id>
<value>50</value>
</setting>
</sets>
Если вам не нужен преобразованный XML, а просто, скажем, словарьid -> value
отображение, (сохраняя value
как int
), вы можете сделать:
var doc = XDocument.Parse(xml_str);
var settings_dict = doc.Element("sets").Elements("setting").ToDictionary(s => s.Element("id").Value, s => Convert.ToInt32(s.Element("value").Value));