Загрузка значений из файла xml

246
15 августа 2017, 12:17

Имею такой xml файл

<root>
    <mainsettings>
        <version>v.0.1.0</version>
        <Window>
            <H>100</H>
            <L>200</L>
        </Window>
    </mainsettings>
.....
</root>

Как правильно загрузить значения в переменные? В данный момент делаю это вот так

var settings = xDoc.Descendants("MainSettings");
Win.Height = Convert.ToInt32(settings .Descendants("Window").Descendants("Width").First().Value);
Win.Length = Convert.ToInt32(settings .Descendants("Window").Descendants("Length").First().Value);

Может есть какой-то правильный способ?

Answer 1

Если вам нужно просто считать значения без получения объектной структуры всего файла, возможно, подойдёт простое

var doc = XDocument.Load(path);
var win = doc.Root.Element("mainsettings").Element("Window");
var h = (int)win.Element("H");
var w = (int)win.Element("L");
Answer 2

Вы можете воспользоваться объектом XmlSerializer для десериализации xml

Вот код для вашего случая

class Window {public int H; public int L;}
class MainSettings {public string version; public Window Window; }
class Root {public MainSettings mainsettings;}
MainSettings DeserializeSetting(string fullFilename)
{
    var serializer = new XmlSerializer(typeof(Root), new XmlRootAttribute("root"));
    using (var fs = new FileStream(fullFilename, FileMode.Open))
    {
        var reader = XmlReader.Create(fs);
        var root = (Root)serializer.Deserialize(reader);
        return root.mainsettings;
    }
}
Answer 3

Есть еще вот такой способ:

public class Window
{
 public int H {get;set;}
 public int W {get;set;}
}
List<Window> wins = new List<Window>();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filepath);
XmlNodeList elemList = xmlDoc.GetElementsByTagName("Window");
foreach (XmlNode node in elemList)
{
    wins.Add(new Window
             {
                 W = Convert.ToInt32(node.SelectSingleNode("L").InnerText),
                 H = Convert.ToInt32(node.SelectSingleNode("H").InnerText)
             });
}
READ ALSO
Initialize() в Monogame

Initialize() в Monogame

Я начинал изучатьFramework MonoGame/XNA языка C#,уже понимаю устройство программы,но не могу понять зачем нужен метод Initialize()

215
Сортировка выбором. Поясните момент

Сортировка выбором. Поясните момент

За комментировал строки которые не могу понять, помогите разобратьсяСпасибо

187
ввод и вывод float аргументов через Main

ввод и вывод float аргументов через Main

Столкнулся с интересным и не совсем понятным поведением компилятора

249