Вот пример C #:
static void Main()
{
XDocument controls = XDocument.Load(@"..\..\XMLFile1.xml");
string id1 = "TC_001", id2 = "L3";
Dictionary<string, string> props =
ReadFromXml(controls, id1, id2);
foreach (string key in props.Keys)
{
Console.WriteLine("{0}: {1}", key, props[key]);
}
}
static Dictionary<string, string> ReadFromXml(XDocument controlDoc, string listId, string controlId)
{
return controlDoc
.Elements("ControlList")
.First(c => (string)c.Attribute("id") == listId)
.Elements("Control")
.First(c => (string)c.Attribute("uid") == controlId)
.Elements("Property")
.ToDictionary(p => (string)p.Attribute("name"),
p => { string value = p.Value.Trim(); return value == "null" ? null : value; });
}
Предполагается, что переданные идентификаторы всегда присутствуют в переданном XML, в противном случае вызовы First () вызовут исключение.
[править] Для измененной структуры XML вы можете использовать следующую адаптацию метода:
static Dictionary<string, string> ReadFromXml(XDocument controlDoc, string listId, string controlId)
{
return controlDoc
.Elements("ControlList")
.First(c => (string)c.Attribute("id") == listId)
.Elements("Control")
.First(c => (string)c.Attribute("uid") == controlId)
.Elements()
.ToDictionary(el => el.Name.LocalName,
el => { string value = el.Value.Trim(); return value == "null" ? null : value; });
}