Как спарсить значения из xml документа

Вот содержимое xml документа

<?xml version="1.0"?>
<Filename version="0.0.0.1" platform="windows">
    <Settings>
       <Setting name="Use proxy">ON</Setting>
       ....
            <Tabs>
                  <Tab selected="1">
                     <LocalPath>C:\Users\admin\</LocalPath>
                     <Pass encoding="base64">Mjxs1XZPODqzv=</Pass>
                  </Tab>
            </Tabs>
    </Setting>
</Filename>

Как можно спарсить значения LocalPath и Pass encoding=

Попробовал из этого примера сделать так:

var doc = new XmlDocument();
doc.Load("ProxyViewer.xml");
var bookNodes = doc.SelectNodes("//Tabs/Tab selected=\"1\"");
foreach (XmlNode item in bookNodes)
{
    string locPath = item.SelectSingleNode("./LocalPath").InnerText;
    string pass = item.SelectSingleNode("./Pass encoding=").InnerText;
    Console.WriteLine("locPath {0} pass: {1}",locPath, pass);
}

Но оно не находит


Ответы (1 шт):

Автор решения: Yitzhak Khabinsky

Как уже упоминалось в комментарии @EvgeniyZ, лучше использовать LINQ to XML API. Он доступен в .Net Framework с 2007 года.

c#

void Main()
{
    const string filePath = @"e:\Temp\ProxyViewer.xml";
    XDocument xdoc = XDocument.Load(filePath);

    string selected = "1";

    var xelem = xdoc.Descendants("Tab")
        .Where(x => x.Attribute("selected").Value.Equals(selected));

    Console.WriteLine("locPath: '{0}', pass: '{1}'"
        , xelem.Elements("LocalPath").FirstOrDefault()?.Value
        , xelem.Elements("Pass").FirstOrDefault()?.Value);

}

Результат

locPath: 'C:\Users\admin\', pass: 'Mjxs1XZPODqzv='
→ Ссылка