Member 11859517 Ответов: 1

Hwo для чтения XML-файла с помощью C#,


У меня есть xml файловая структура, такая как,
<?xml version="1.0" encoding="utf-16"?>
<root>
  <path>C:\Users\bsushil\Documents\Sharpdesk Desktop\New folder</path>
  <path>C:\Users\bsushil\Documents\Sharpdesk Desktop\New folder (1)</path>
  <path>C:\Users\bsushil\Documents\Sharpdesk Desktop\New folder (2)</path>
</root>


Как мне получить значение пути?

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

XDocument xdoc = XDocument.Load(@"D:\Sushil\Information.xml");

           var servers = xdoc.Descendants("root");
           for (var server in servers)

1 Ответов

Рейтинг:
12

Maciej Los

Ты на правильном пути:

XDocument xdoc = XDocument.Load(@"D:\Sushil\Information.xml");
var paths = xdoc.Descendants("path").Select(x=>x.Value).ToList();
for (var p in paths)
{
    Console.WriteLine("{0}", p);
}


Member 11859517

Спасибо Мацей,

Я получил путь, теперь я проверяю, существует ли каталог или нет, если он не существует, то сразу же я должен удалить этот узел из xml-файла, как мы можем это сделать?

Maciej Los

Всегда пожалуйста.
Проверить это: Метод XNode.Remove ()

Member 11859517

Спасибо Мацей Лос,
Я не могу удалить из xml - файла, вы дали решение для получения пути

var paths = xdoc.Потомки("путь").Выберите(x=>x.Value).Список();
for (var p в путях)
{
если(!Каталог.Существует(п)
{
удалить из xml-файла????? как я могу это сделать,
}
}

Maciej Los

п. Удалить();

Member 11859517

Получаю эту ошибку,
Ошибка 104 тип 'char' не может быть использован в качестве параметра типа 'T' в универсальном типе или методе
Системы'.В формате XML.В LINQ.Расширения.Удалить<t>(System.Коллекции.Общий.IEnumerable<t>)'.
Нет никакого боксерского преобразования из 'char' в 'System.Xml.Linq.XNode'.

Maciej Los

Потому что вам нужно вернуть XNode, а не текст. Изменить:

var paths = xdoc.Descendants("path").Select(x=>x.Value).ToList();

к:
var paths = xdoc.Descendants("path").Select(x=>x).ToList();

Member 11859517

Это уберет откуда? потому что он не удаляется из xml-файла. мне нужно, когда path.value не существует, удалить из файла .xml. как я могу обновить xml-файл так, чтобы он содержал только доступные элементы?
спасибо.

Maciej Los

Омг! Вы пытаетесь решить свою проблему самостоятельно или вы действительно ожидаете, что я решу все ваши проблемы?

XDocument xdoc = XDocument.Load(@"D:\Sushil\Information.xml");
var paths = xdoc.Descendants("path").ToList();

for(int i=0;i<paths.Count;i++)
{
	if(!Directory.Exists(paths[i].Value)) paths[i].Remove();
}

Member 11859517

Спасибо тебе, Мацей Лос.
<root>
<папка>
<путь>C:\Users\bsushil\Documents\Sharpdesk рабочий стол\Тинки
<имя>Tinkiiiii

<папка>
<путь>C:\Users\bsushil\Documents\Sharpdesk рабочий стол\Тинки\Новая папка
<имя>новой папки

<папка>
<путь>C:\Users\bsushil\Documents\Sharpdesk рабочий стол\Тинки\Новая папка (1)
<name>Новая папка (1)



Как я могу извлечь это в словарь<string, string>.

Maciej Los

Вы должны опубликовать его как новый вопрос...
Дай мне знать, когда закончишь.
[РЕДАКТИРОВАТЬ]
Кстати: Ваш xml не очень хорошо сформирован. Я не вижу конечной метки для имени.

Member 11859517

Окончание тега есть, но когда я вставил его, он не пришел, кстати, я получил ответ,
Спасибо Вам за вашу большую помощь.

Maciej Los

Всегда пожалуйста.

Member 11859517

вот мое решение.
foreach(XElement xe в xdoc.Потомки("Папка"))
{
dictionary.Add(xe.Element("имя").Value),xe.Element("путь").Ценность);
}

Maciej Los

Молодец!