Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
.NET 5

Библиотека для работы с XML файлами

04.11.2021, 14:15. Показов 3665. Ответов 34

Студворк — интернет-сервис помощи студентам
Всем привет!
Может есть у кого толковая библа для XML, запись, чтение, удаление, поиск по узлам/атрибутам..?
Я когда-то писал свою, но потерялся проект. Заново не хочется пилить.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.11.2021, 14:15
Ответы с готовыми решениями:

Сторонняя библиотека для работы с файлами
Здравствуйте, используя FileStream и BinaryReader столкнулся с тем, что они не достаточно производительны. Сначала считывал побайтово, а...

Применение технологии ADO для работы с XML-файлами
Всем привет! В силу обстоятельств пришлось столкнуться и с ADO и с .NET чуть ближе чем хотелось бы. Прошу помочь решить...

Библиотека для работы с файлами
Нужен какой-нибудь набор готовых методов для работы с файлами: копирование, переименование, поиск подстроки, установка курсора на такую-то...

34
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
05.11.2021, 21:35
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от wizard41 Посмотреть сообщение
У меня по умолчанию в проекте создается class Program, а не public class Program
Он у всех так создаётся.
Проблема в том, что у вас класс Line создан вложенным в Program.
Поэтому модификатор Program влияет на него.
Если бы вы Line создавали как оно положено в отдельном файле в пространстве имён, то никаких проблем бы не было.
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
05.11.2021, 21:36  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если бы вы Line создавали как оно положено в отдельном файле в пространстве имён, то никаких проблем бы не было.
А, вон оно че. Учту!
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
05.11.2021, 21:38
Цитата Сообщение от wizard41 Посмотреть сообщение
Состав структуры XML-файла утверждать буду я, поэтому пока все только на этапе схематичной разработки.
Всё равно следует идти от проектирования XML файла.
Дать ему какое-то начальное заполнение, с нужными вам атрибутами.
А потом по нему создать структуру файлов автоматическим инструментом.
Потом эту структуру уже подправишь как тебе нужно.

Так намного проще, чем самому создавать всю структуру.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
05.11.2021, 21:40  [ТС]
Элд Хасп,
На самом деле это просто тестовый проект в консоли. Так то я всегда классы создаю в отдельной библиотеке.
А приложение и вовсе на винформ будет, там в гриде надо будет отображать эти сведения.

Добавлено через 2 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
идти от проектирования XML файла
Но он и будет примерно такой, плюс может быть добавится еще пару деталей.
С другой стороны, через месяц скажут, дескать, добавляй еще техническую спецификацию к каждой модели - вот это будет ж... )
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
05.11.2021, 21:43
Цитата Сообщение от wizard41 Посмотреть сообщение
Получился такой файл:
Я бы так сделал:
XML
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8" ?>
<Catalog>
  <Hardwares>
    <hardware id="1" manufacturer="Mitsubishi" model="FR"/>
    <hardware id="12345" manufacturer="Mitsubishi" model="A800"/>
    <hardware id="929210" manufacturer="Lenze" model="TM350"/>
  </Hardwares>
</Catalog>
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
05.11.2021, 21:44  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я бы так сделал:
Я так же делал с LinqXml. А как с серилизацией так сделать пока не понял.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
05.11.2021, 21:45
Цитата Сообщение от wizard41 Посмотреть сообщение
добавляй еще техническую спецификацию к каждой модели - вот это будет ж...
Да, никакой проблемы.
Добавишь пару атрибутов или вложенных элементов.
Пересоздашь структуру классов и всё.

Добавлено через 41 секунду
Цитата Сообщение от wizard41 Посмотреть сообщение
Я так же делал с LinqXml. А как с серилизацией так сделать пока не понял.
Создал XML файл, а потом, я дал выше ссылку, Студия сама по нему создаст классы.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
05.11.2021, 21:47  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
я дал выше ссылку
Да, посмотрю
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
05.11.2021, 21:50
Вот такие классы создала Студия по XML что я предложил:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
namespace Febr20y
{
 
    // Примечание. Для запуска созданного кода может потребоваться NET Framework версии 4.5 или более поздней версии и .NET Core или Standard версии 2.0 или более поздней.
    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public partial class Catalog
    {
 
        private CatalogHardware[] hardwaresField;
 
        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("hardware", IsNullable = false)]
        public CatalogHardware[] Hardwares
        {
            get
            {
                return this.hardwaresField;
            }
            set
            {
                this.hardwaresField = value;
            }
        }
    }
 
    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class CatalogHardware
    {
 
        private uint idField;
 
        private string manufacturerField;
 
        private string modelField;
 
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public uint id
        {
            get
            {
                return this.idField;
            }
            set
            {
                this.idField = value;
            }
        }
 
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string manufacturer
        {
            get
            {
                return this.manufacturerField;
            }
            set
            {
                this.manufacturerField = value;
            }
        }
 
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string model
        {
            get
            {
                return this.modelField;
            }
            set
            {
                this.modelField = value;
            }
        }
    }
 
 
}
Добавлено через 1 минуту
Можно использовать так как есть.
Но я обычно их причёсываю и проверяю, чтобы типы свойств были те которые мне нужны.

Добавлено через 1 минуту
wizard41, вот так создаёт вот этот сайт: https://xmltocsharp.azurewebsites.net/
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
   /* 
    Licensed under the Apache License, Version 2.0
    
    http://www.apache.org/licenses/LICENSE-2.0
    */
using System;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace Xml2CSharp
{
    [XmlRoot(ElementName="hardware")]
    public class Hardware {
        [XmlAttribute(AttributeName="id")]
        public string Id { get; set; }
        [XmlAttribute(AttributeName="manufacturer")]
        public string Manufacturer { get; set; }
        [XmlAttribute(AttributeName="model")]
        public string Model { get; set; }
    }
 
    [XmlRoot(ElementName="Hardwares")]
    public class Hardwares {
        [XmlElement(ElementName="hardware")]
        public List<Hardware> Hardware { get; set; }
    }
 
    [XmlRoot(ElementName="Catalog")]
    public class Catalog {
        [XmlElement(ElementName="Hardwares")]
        public Hardwares Hardwares { get; set; }
    }
 
}
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
05.11.2021, 21:57  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
вот так создаёт вот этот сайт:
Ну теперь дело пойдет!
Я даже не знал за такие штуки...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
05.11.2021, 21:59
Цитата Сообщение от wizard41 Посмотреть сообщение
Ну теперь дело пойдет!
Я даже не знал за такие штуки...
Но обратите внимание сайт неверный тип задаёт свойству Id.
Нужен int, а он задаёт string.
Подправьте или найдите другой сайт.
Я вам дал первый сто предложил Гугл.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
05.11.2021, 22:02  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Но обратите внимание сайт неверный тип задаёт свойству Id.
Ну это понятно, что руками потом править надо. Я слепо не доверяю ничему что сформировано скриптами, каждую строчку проверяю
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
06.11.2021, 13:35  [ТС]
Так, получилась такая схема:
Класс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        [XmlRoot( ElementName = "Item" )]
    public class Item
    {
        [XmlElement( ElementName = "techdata" )]
        public string Techdata { get; set; }
        [XmlAttribute( AttributeName = "id" )]
        public int Id { get; set; }
        [XmlAttribute( AttributeName = "manufacturer" )]
        public string Manufacturer { get; set; }
        [XmlAttribute( AttributeName = "model" )]
        public string Model { get; set; }
    }
 
    [XmlRoot( ElementName = "Catalog" )]
    public class Catalog
    {
        [XmlElement( ElementName = "Item" )]
        public List<Item> Item { get; set; }
        public Catalog() => Item = new List<Item>();
        public void ItemAdd( Item item ) => Item.Add( item );
    }
Данные
C#
1
2
3
Catalog cat = new();
cat.ItemAdd( new Item { Id = 1, Manufacturer = "Mitsubishi", Model = "FR", Techdata = "ttt21" } );
cat.ItemAdd( new Item { Id = 2, Manufacturer = "Mitsubishi", Model = "A800", Techdata = "fff55" } );
Файл
XML
1
2
3
4
5
6
7
8
9
<?xml version="1.0"?>
<Catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Item id="1" manufacturer="Mitsubishi" model="FR">
    <techdata>ttt21</techdata>
  </Item>
  <Item id="2" manufacturer="Mitsubishi" model="A800">
    <techdata>fff55</techdata>
  </Item>
</Catalog>
Вроде бы все как надо.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
06.11.2021, 17:12
Цитата Сообщение от wizard41 Посмотреть сообщение
Вроде бы все как надо.
Я бы изменил название тега Item - слишком оно обобщающее и фактически ничего не обозначает.
Что у вас хранится в Каталоге?
Вот элементам в нём и дайте соответствующее название.

Так же, я бы выделил manufacturer в отдельную таблицу.
А в классах Каталога задавал Id производителя.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
06.11.2021, 17:27  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я бы изменил название тега Item - слишком оно обобщающее и фактически ничего не обозначает.
Да, я согласен, Item мне тоже не нравится. Но это пока "рыба" и я назвал так вот еще почему:
каждый такой xml-файл будет хранить инфу о конкретном типе набора оборудования; считаю нет смысла пихать в один файл и частотные преобразователи и жесткие диски от компов.
Например, запросили из Питера наши остатки по энкодерам, я беру и отправляю им xml с энкодерами. Им незачем знать сколько чего у нас есть другого.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Так же, я бы выделил manufacturer в отдельную таблицу.
А в классах Каталога задавал Id производителя.
Абсолютно верно, однако производителей всего лишь с десяток-полтора, поэтому я не стал внедрять такие хитросплетения.
У меня будет задача посложнее - в другом xml файле должны быть выборки из этого, т.е. что где установлено на линиях. Поэтому я ввел "Id", по которому можно определить что за модель имеется в виду. Ну, типа как в БД.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.11.2021, 17:27

Библиотека для работы с файлами
Подскажите какую нибудь библиотеку для работы с файлами, которую обычно используют совместно с OpenGL. Я понимаю что можно тем же...

Библиотека для работы с файлами Фотошопа
Привет всем! Подскажите, пожалуйста, существует ли какая-то бесплатная библиотека для .NET (C# или VB), с помощью которой можно было...

Библиотека для работы с CSV файлами
Всем привет! Есть задание на лабораторную работу. Начал в нем разбираться - наткнулся в инете на книжку Кернигана и Пайка &quot;Практика...

Библиотека для работы с MsWord файлами
Добрый день. Люди подскажите, есть какая нибудь библиотека для работы с MsWord файлами? заранее пасиб.

Библиотека для работы с zip файлами
Подскажите библиотеку (с хорошей докой) для работы с zip файлами. Необходимо распаковывать файлы созданные winzip.


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru