Как я могу просто присвоить данные из документа xml переменной? - PullRequest
0 голосов
/ 14 апреля 2020

Я новичок в c# и использую XML вместе с ним. Я просто хочу взять данные из каждого узла «голосов» и назначить их для семи различных переменных типа int, используя любой метод, который проще всего (я читал, что linq хорош). Я пробовал пару раз, но большая часть того, что я прочитал, слишком сложна. Меня также смущает, как я могу ссылаться на конкретный узел c, если есть другие узлы с таким же именем. Это файл XML:

    <results>
      <result>
        <name>one</name>
        <votes>100</votes>
      </result>
      <result> 
        <name>two</name>       
        <votes>200</votes>        
      </result>
      <result> 
        <name>three</name>       
        <votes>300</votes>        
      </result>
      <result>
        <name>four</name>
        <votes>400</votes>        
      </result>
      <result>
        <name>five</name>
        <votes>500</votes>        
      </result>
      <result>
        <name>six</name>
        <votes>600</votes>        
      </result>
      <result>
        <name>seven</name>
        <votes>700</votes>        
      </result>
    </results>

Буду очень признателен за любую помощь!

1 Ответ

1 голос
/ 14 апреля 2020

Легко и просто с помощью Linq.

(Используйте XElement.Load для загрузки файла вместо анализа строки.)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

namespace so61208822
{
    class Program
    {
        static string xmlData = @"
<results>
  <result>
    <name>one</name>
    <votes>100</votes>
  </result>
  <result>
    <name>two</name>
    <votes>200</votes>
  </result>
  <result>
    <name>three</name>
    <votes>300</votes>
  </result>
  <result>
    <name>four</name>
    <votes>400</votes>
  </result>
  <result>
    <name>five</name>
    <votes>500</votes>
  </result>
  <result>
    <name>six</name>
    <votes>600</votes>
  </result>
  <result>
    <name>seven</name>
    <votes>700</votes>
  </result>
</results>
";
        static void Main(string[] args)
        {
            var root = XElement.Parse(xmlData);
            var votes = root.Descendants("result").ToDictionary(i => (string)i.Element("name"), i => (int)i.Element("votes"));
            foreach(var vote in votes) {
                Console.WriteLine("{0}: {1} votes", vote.Key, vote.Value);
            }
        }
    }
}

Это выводит, например,

one: 100 votes
two: 200 votes
three: 300 votes
four: 400 votes
five: 500 votes
six: 600 votes
seven: 700 votes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...