Member 11859517 Ответов: 2

Как перебрать XML-файл с помощью C#


У меня есть файл .xml, например
<?xml version="1.0" encoding="utf-8"?>
<root>
  <Folder>
    <path>C:\Users\bsushil\Documents\Sharpdesk Desktop\Tinki</path>
    <name>Tinkiiiii</name>
  </Folder>
  <Folder>
    <path>C:\Users\bsushil\Documents\Sharpdesk Desktop\Tinki\New folder</path>
    <name>New folder</name>
  </Folder>
  <Folder>
    <path>C:\Users\bsushil\Documents\Sharpdesk Desktop\Tinki\New folder (1)</path>
    <name>New folder (1)</name>
  </Folder>
</root>

Я хочу повторить итерацию, чтобы получить путь к значению и имя. как я могу это сделать ?

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

Я создаю этот xml с помощью.
XElement root = xmlDoc.Element("root");
          root.Add(new XElement("Folder",
              new XElement("path", item.OriginalPath),
              new XElement("name", FolderShortcutName)));
          xmlDoc.Save(folderShortcutsFilsXml);


Я могу повторить только путь, используя
var pathsList = xmlDoc.Descendants("path").Select(x => x.Value);

но я хочу, чтобы путь и имя были оба и сохранялись в словаре<string, string>

2 Ответов

Рейтинг:
9

Member 11859517

Вот мое рабочее решение

foreach (XElement xe in xdoc.Descendants("Folder"))
               {
                   dectionary.Add(xe.Element("name").Value, xe.Element("path").Value);
               }


CHill60

Я заметил, что вы опубликовали несколько решений своих собственных вопросов, а затем приняли свое собственное решение. Пожалуйста, будьте осторожны, чтобы ваше поведение не воспринималось как "точечное земледелие", так как оно может быть сообщено как злоупотребление сайтом. Если чье - то решение помогло вам убедиться, что вы правильно его оцениваете-вы можете принять более одного решения, если это необходимо. Например: Как передать строку json методу client.postasync() в C#?[^]

Рейтинг:
2

TheRealSteveJudge

Вы могли бы достичь своей цели вот так:

var xmlDocument = new XmlDocument();

xmlDocument.Load("data.xml");

var nodes = xmlDocument.DocumentElement?.SelectNodes("/root/Folder");

if (nodes == null) return;

var dictionary = nodes.Cast<XmlNode>().ToDictionary(node =>
{
	var selectSingleNode = node.SelectSingleNode("path");

	return selectSingleNode?.InnerText;
}, node =>
{
	var singleNode = node.SelectSingleNode("name");
	return singleNode?.InnerText;
});