TheBigBearNow Ответов: 1

Xml – LINQ выберите правильное значение узла и как выбрать другие


Всем привет,
Я создал XML-документ. Я вроде как посмотрел на Настройки C#, потому что это будет пользовательский сценарий конфигурации для моей программы. Мне нужно иметь его в определенном каталоге, который у меня уже есть, но теперь я пытаюсь получить правильные данные узлов. Как я могу выбрать конкретное значение узла, используя XML для linq?
Вот что у меня есть.
У меня есть 1 узел с несколькими значениями (путями) и еще один узел, который имеет тот же родительский узел, что и другой, я хочу получить второе значение.
Мне нужно второе значение "база данных". 'PDMDataBaseName’ и все пути в <filepaths>

Что я уже пробовал:

<pre><Configuration>
  <Settings>
    <UserProfile Name="UserPlus" Type="System.Boolean" Scope="User">
      <Value Profile="(Default)">True</Value>
    </UserProfile>
    <DataBase Name="DataBaseName" Type="System.String" Scope="User">
      <Value Profile="(Default)">TRACKER </Value>
    </DataBase>
    <DBTable Name="FileTableName" Type="System.String" Scope="User">
      <Value Profile="(Default)">ScannedPDFtest</Value>
    </DBTable>
    <FilePaths Name="FileDirectories" Type="System.Collections.Specialized.StringCollection" Scope="User">
      <Path>\\file01\public1\Eng Files .pdf</Path>
      <Path>C:\Users\tom\Documents\zTests</Path>
    </FilePaths>
    <DataBase Name="PDMDataBaseName" Type="System.String" Scope="User">
      <Value Profile="(Default)">TRACKER_TEST</Value>
    </DataBase>

Code to get userplus value
var queryUser = from u in xml.Descendants("Settings")
                            //where u.Element = "UserProfile"
                        select u.Element("UserProfile").Value;
            lblUserPlus.Text = queryUser.First();
others I been trying without luck
            var queryFileTable = from ft in xml.Descendants("Settings")
                                     //where
                                 select ft.Element("DBTable").Value;
            lblFileTable.Text = queryFileTable.FirstOrDefault();

            var queryFileDirs = from fd in xml.Descendants("Settings")
                                    // where fd.Element("DBTable").Attribute("PDMTableName")
                                    // select fd.Value;
                                select fd.Element("DBTable").Attribute("PDMTableName");
            lblFileDirs.Text = queryFileDirs.ToString();

1 Ответов

Рейтинг:
2

Richard Deeming

Чтобы получить узел базы данных на основе его имени:

XElement PDMDataBaseName = xml
    .Descendants("Settings")
    .Elements("DataBase")
    .FirstOrDefault(el => (string)el.Attribute("Name") == "PDMDataBaseName");
Чтобы получить пути к файлам:
IEnumerable<string> filePaths = xml
    .Descendants("Settings")
    .Elements("FilePath")
    .Where(el => (string)el.Attribute("Name") == "FileDirectories")
    .Elements("Path")
    .Select(el => (string)el);


Maciej Los

5ed!