Чтобы облегчить доступ к данным, вы должны создать классы для доступа к данным. Разбивая проблему на разные уровни, она облегчает понимание, отладку и поддержание актуальности. Я пошел дальше и создал пример этого, используя этот файл расширений .
Чтобы использовать следующее, вы получите link1
из word
с:
ButtonsXml buttons = new ButtonsXml("C:\\myXmFile.xml");
string link1 = buttons["word"][1].Link;
Вот код:
public class ButtonsXml
{
XElement self;
Dictionary<string, DataCollection> list = new Dictionary<string, DataCollection>();
public ButtonsXml(string file)
{
self = XElement.Load(file);
}
public DataCollection this[string name]
{
get
{
if (list.ContainsKey(name))
return list[name];
DataCollection c = new DataCollection(self.GetElement(name));
list.Add(name, c);
return c;
}
}
public void Save(string file)
{
self.Save(file);
}
}
public class DataCollection
{
XElement self;
public Dictionary<int, Element> list = new Dictionary<int,Element>();
public DataCollection(XElement self)
{
this.self = self;
}
public Element this[int index]
{
get
{
if (list.ContainsKey(index))
return list[index];
Element e = new Element(self, index);
list.Add(index, e);
return e;
}
}
}
public class Element
{
XElement parent;
int index;
public Element(XElement parent, int index)
{
this.parent = parent;
this.index = index;
}
public string Path
{
get { return parent.GetString("path" + index.ToString(), string.Empty); }
set { parent.Set("path" + index.ToString(), value, XElementConversions.ELEMENT); }
}
public string Link
{
get { return parent.GetString("link" + index.ToString(), string.Empty); }
set { parent.Set("link" + index.ToString(), value, XElementConversions.ELEMENT); }
}
}
Если вы хотите установить значения Path или Link, я добавил сеттеры: они будут установлены таким же образом. Затем нужно будет вызвать buttons.Save(file)
, чтобы сохранить изменения в файле.
buttons["word"][1].Link = "new value";