Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для Basyan
1 / 1 / 0
Регистрация: 04.06.2015
Сообщений: 22

Чтение XML файла

21.12.2017, 19:17. Показов 2123. Ответов 6

Студворк — интернет-сервис помощи студентам
Есть XML файл такого вида. Как перенести значения coins и health в язык С# ?

XML
1
2
3
4
5
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <int name="coins" value="100" />
    <int name="health" value="50" />
</map>
Например что бы amountCoins получил значение coins из XML.
C#
1
2
 public int amountCoins;
 public int amountHealth;
Добавлено через 4 часа 30 минут
Сообразил такой код.
C#
1
2
3
4
5
6
7
8
9
10
11
12
XmlTextReader reader = new XmlTextReader (xmlFile);
                while (reader.Read ()) {
                if (reader.IsStartElement("coins"))
                        {
                        int q;
                        if(int.TryParse(reader.GetAttribute("value"), out q)) 
                        {
                                amountCoins = q;
                        }
                        }
                }
                reader.Close ();
Но он определяет только строки вида
XML
1
<coins value="10" />
А мне нужна вот такая
XML
1
<int name="coins" value="10" />
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.12.2017, 19:17
Ответы с готовыми решениями:

Чтение XML файла
Добрый вечер. Даю сразу исходники: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;head&gt; &lt;object number=&quot;1&quot;&gt; ...

Чтение из XML файла
Добрый день. Очень интересует работа с XML, по этой причине весь вчерашний день занимался чтением литературы и медитациями над кодом. ...

Чтение из XML-файла
привет всем! очень нужна помощь по чтению XML файла............. вот сам файл: &lt;?xml version=&quot;1.0&quot;...

6
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18277 / 14200 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
21.12.2017, 19:21
Basyan,
C#
1
2
3
4
5
6
using System.Xml.Linq;
using System.Xml.XPath;
...
XElement xmap = XElement.Load(xmlFile);
amountCoins = int.Parse(xmap.XPathSelectElement("int[@name='coins']").Value);
amountHealth = int.Parse(xmap.XPathSelectElement("int[@name='health']").Value);
1
 Аватар для Basyan
1 / 1 / 0
Регистрация: 04.06.2015
Сообщений: 22
21.12.2017, 20:05  [ТС]
Получаю ошибку. Что бы это могло значить?
C#
1
2
FormatException: Input string was not in the correct format
System.Int32.Parse (System.String s)
Вроде решил проблему.
C#
1
amountCoins = Convert.ToInt32(Root.SelectSingleNode("int[@name='coins']").Attributes["value"].Value);
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18277 / 14200 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
21.12.2017, 20:43
Basyan, мой недосмотр. Значение же в атрибуте хранится
C#
1
2
amountCoins = int.Parse(xmap.XPathSelectElement("int[@name='coins']").Attribute("value").Value);
amountHealth = int.Parse(xmap.XPathSelectElement("int[@name='health']").Attribute("value").Value);
Добавлено через 3 минуты
Цитата Сообщение от Basyan Посмотреть сообщение
Вроде решил проблему.
C#
1
amountCoins = Convert.ToInt32(Root.SelectSingleNode("int[@name='coins']").Attributes["value"].Value);
Можно немного проще:
C#
1
amountCoins = Convert.ToInt32(Root.SelectSingleNode("int[@name='coins']/@value").Value);
1
 Аватар для Basyan
1 / 1 / 0
Регистрация: 04.06.2015
Сообщений: 22
21.12.2017, 21:03  [ТС]
Огромное спасибо! Могли бы ещё подсказать как перенести float и string ?

XML
1
2
<float name="percent" value="9.5" />
 <string name="nickname">Basyan</string>
Добавлено через 6 минут
С float уже разобрался а вот как сделать string не пойму.
C#
1
int amountPercent = string.Parse(xmap.XPathSelectElement("string[@name='percent']").Attribute("value").Value);
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18277 / 14200 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
22.12.2017, 00:10
Лучший ответ Сообщение было отмечено Почтальон как решение

Решение

Basyan, string элементарно переносится.
C#
1
string nickname = xmap.XPathSelectElement("string[@name='nickname']").Value;
P.S. Предлагаю немного сумашедший, но удобный вариант с использованием dynamic %)
Тип получаемого значения задается префиксом: i_ => int, f_ => float, s_ => string. Поиск имени идет без учета регистра.
C#
1
2
3
4
dynamic map = DynamicMap.Load(xmlFile);
int coins = map.i_coins;
float percent = map.f_percent;
string nickname = map.s_nickname;
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class DynamicMap : DynamicObject
{
    Dictionary<string, string> _mapValues = new Dictionary<string, string>();
    
    public static dynamic Load(string uri)
    {
        return new DynamicMap() {
            _mapValues = XElement.Load(uri).Elements().ToDictionary(
                x => x.Attribute("name").Value,
                x => x.Attribute("value") != null ? x.Attribute("value").Value : x.Value,
                StringComparer.OrdinalIgnoreCase
            )
        };
    }
 
    public static dynamic Parse(string xml)
    {
        return new DynamicMap() {
            _mapValues = XElement.Parse(xml).Elements().ToDictionary(
                x => x.Attribute("name").Value,
                x => x.Attribute("value") != null ? x.Attribute("value").Value : x.Value,
                StringComparer.OrdinalIgnoreCase
            )
        };
    }
 
    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        if (binder.Name.Length > 2 && binder.Name[1] == '_')
        {
            char typePrefix = binder.Name[0];
            string name = binder.Name.Substring(2);
            string value;
            if (_mapValues.TryGetValue(name, out value))
            {
                switch (typePrefix)
                {
                    case 'i':
                        result = int.Parse(value, CultureInfo.InvariantCulture);
                        return true;
                    case 'f':
                        result = float.Parse(value, CultureInfo.InvariantCulture);
                        return true;
                    case 's':
                        result = value;
                        return true;
                }
            }
        }
        
        result = null;
        return false;
    }   
}
1
 Аватар для Basyan
1 / 1 / 0
Регистрация: 04.06.2015
Сообщений: 22
22.12.2017, 22:38  [ТС]
OwenGlendower, Большое спасибо! Вы помогли мне в решении моей задачи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2017, 22:38
Помогаю со студенческими работами здесь

Запись и чтение из XML файла
У меня есть список элементов, из этого списка я хочу выборочно записывать данные в XML файл. Список состоит из таких данных: ...

Загрузка и чтение xml файла
для xml парсера мне нужно загрузить xml файл но как это сделать string fileName = &quot;http://www.cbr.ru/scripts/XML_daily.asp&quot;; ...

Чтение и изменение XML файла
Подскажите пожалуста как можно осуществить чтение всех атрибутов из всех элементов XML файла, затем изменить некоторые из них и обратно...

Чтение информации из xml файла
Всем Доброго времени суток!! Помогите решить данный вопрос. Есть xml файл со следующим кодом &lt;response...

Чтение и запись xml файла
Есть xml файл устроеный следущим образом: &lt;Persons&gt; &lt;person&gt; &lt;name&gt; ... &lt;/name&gt; &lt;date&gt; ... &lt;/date&gt; &lt;/person&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru