powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа с XML
6 сообщений из 6, страница 1 из 1
Работа с XML
    #38495817
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день! Столкнулся с такой проблемой:

У меня есть XML файл. В нём есть узел типа:
Код: xml
1.
2.
3.
4.
	<download>
		<file path="D:\Projects\Updater\TestFolder\Winf.exe" key="Winf.exe" />
		<file path="D:\Projects\Updater\TestFolder\Up.pdb" key="Up.pdb" />
	</download>



Мне надо получить список этих самых файлов. Делаю таким способом:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
doc_settings = XDocument.Load("Settings.xml");
                
var files = doc_settings.Root.Descendants("download").Descendants("file").Select(item => new { path = item.Attribute("path").Value, key = item.Attribute("key").Value });

foreach (var locfile in files)
{
     //var locversion = new Version(FileVersionInfo.GetVersionInfo(locfile.path).FileVersion ?? "0.0");
     //var locdate = File.GetLastWriteTime(path);
}



Список перечислялся, получалось обращаться к частям locfile в цикле foreach (к примеру locfile.path)

Мне потребовалось чтобы var files была в области всей формы. Объявить заранее просто var files; нельзя. Только если указать тип. К примеру вот так НЕ вышло:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var files;
private void Test()
{
  doc_settings = XDocument.Load("Settings.xml");
  files = doc_settings.Root.Descendants("download").Descendants("file").Select(item => new { path = item.Attribute("path").Value, key = item.Attribute("key").Value });

  foreach (var locfile in files)
  {
     //var locversion = new Version(FileVersionInfo.GetVersionInfo(locfile.path).FileVersion ?? "0.0");
     //var locdate = File.GetLastWriteTime(path);
  }
}



Попробовал вот так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 private IEnumerable<object> files;
private void Test()
{
                doc_settings = XDocument.Load("Settings.xml");
                
                files = doc_settings.Root.Descendants("download").Descendants("file").Select(item => new { path = item.Attribute("path").Value, key = item.Attribute("key").Value });
                foreach (var locfile in files)
                {
                    //var locversion = new Version(FileVersionInfo.GetVersionInfo(locfile.).FileVersion ?? "0.0");
                    //var locdate = File.GetLastWriteTime(path);
                }
}

В таком случае не могу обратиться к части locfile.path или locfile.key

Как правильно действовать в такой ситуации подскажите пожалуйста!
...
Рейтинг: 0 / 0
Работа с XML
    #38495874
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.Как правильно действовать в такой ситуации подскажите пожалуйста!

KeyValuePair<string, string>
Tuple<string, string>
...
Рейтинг: 0 / 0
Работа с XML
    #38495924
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Алексей Ку.Как правильно действовать в такой ситуации подскажите пожалуйста!

KeyValuePair<string, string>
Tuple<string, string>

Код: c#
1.
files = doc_settings.Root.Descendants("download").Descendants("file").Select(item => new { path = item.Attribute("path").Value, key = item.Attribute("key").Value });



Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<AnonymousType#1>' to 'System.Tuple<string,string>'. An explicit conversion exists (are you missing a cast?)
та же история и с KeyValuePair
...
Рейтинг: 0 / 0
Работа с XML
    #38495933
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.,

Э, вы не шутите?

Так не пробовали?
Select (item => new KeyValuePair<string, string>(item.Attribute("path").Value, item.Attribute("key").Value)
...
Рейтинг: 0 / 0
Работа с XML
    #38496329
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, Увы, не шутил. Под конец дня уже потерял способность адекватно мыслить )
Всё получилось. Спасибо. Назрел ещё один вопрос:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
private IEnumerable<Tuple<string, string>> files2;

files2 = doc_settings.Root.Descendants("download").Descendants("file").Select(item => new Tuple<string, string>(item.Attribute("path").Value, item.Attribute("key").Value));

foreach (var locfile in files2)
{
   string s = locfile.Item1;
...

Обращение к элементам locfile происходит по именам Item1, item2. Их можно как-то переименовать?


OffTopic:
Спасибо большое за помощь!
Пока есть такие ресурсы как sql.ru и люди, которые готовы безвозмездно потратить своё время и помочь - учиться намного приятнее и легче!
...
Рейтинг: 0 / 0
Работа с XML
    #38496501
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не?

Код: c#
1.
2.
3.
4.
5.
    public sealed class MyPair<T1, T2>
    {
        public T1 MyKey { get; set; }
        public T2 MyValue { get; set; }
    }
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа с XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]