Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17

Фильтрация файла XML

20.05.2014, 16:43. Показов 2024. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Есть файл XML, нужно чтоб была фильтрация по PntVolume > 0, т.е. оставляла в файле только значения больше 0. Если можно сделать в форме с кнопками откуда брать файл и куда сохранять. Помогите плиз 2014.01.rar
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2014, 16:43
Ответы с готовыми решениями:

Фильтрация элементов XML-файла
Здравствуйте! Прошу у вас помощи. Есть сайт с условными товарами. Скрипт выгружает XML-файл(7-12Мб) с базой товаров на сервер. ...

Выгрузка в XML файл результатов запроса. Создание xml схемы с имеющегося xml файла
Доброго времени суток. Имеется необходимый для загрузки пример XML файла и из него необходимо построить XML схему для выгрузки данных...

Вывести данные в таблицу из xml файла. - Анализ XML файла, выгружаемого программой SPU_ORB.
Есть такой файлик с расширением .xml (из программы spy_orb) в нем много строк, но нам нужно вытащить только суммы и запихнуть в таблицу,...

17
13 / 13 / 8
Регистрация: 11.10.2013
Сообщений: 102
21.05.2014, 12:10
Как-то так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.IO;
using System.Linq;
using System.Xml.Linq;
 
namespace ConsoleApplication13 {
    class Program {
        static void Main(string[] args) {
            using (StreamReader sr = new StreamReader("2014.01.xml")) {
                XDocument doc = XDocument.Parse(sr.ReadToEnd());
                doc.Descendants("Strike").Where(elem => float.Parse(elem.Attribute("PntVolume").Value) <= 0).Remove();
                Console.WriteLine(doc.ToString());
                Console.ReadLine();
            }
        }
    }
}
С кнопками беда, с работы аплоад файлов не работает, проект соответственно не загружу.
0
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
21.05.2014, 12:16  [ТС]
Спасибо за ответ) Думал никто не ответит) Щас буду эксперементировать с Вашим кодом. Если загрузите проект с кнопками будет шикарно))
0
13 / 13 / 8
Регистрация: 11.10.2013
Сообщений: 102
21.05.2014, 12:20
GabrielGrey, вечером тогда, если вопрос ещё будет актуален) так что если с кнопками всё получится, отпишитесь плз, чтоб я не делал ненужного.
0
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
21.05.2014, 19:01  [ТС]
Как решу этот вопрос отпишусь.

Добавлено через 6 часов 32 минуты
С формой с кнопками пока не получилось, возник другая проблемка. Ваш код отфильтровывает, но оставляет пустые строки
C#
1
<contract date="2013-02-01T00:00:00"/><contract date="2013-03-01T00:00:00"/>-<contract date="2013-04-01T00:00:00"><Strike OpenInterestChange="448" OpenInterest="4178" PntVolume="450" VolumeTradesCleared="19" Delta="0.1802" SettPrice="10.50" StrikeValue="1600"/></contract><contract date="2013-05-01T00:00:00"/><contract date="2013-06-01T00:00:00"/><contract date="2013-07-01T00:00:00"/><contract date="2013-08-01T00:00:00"/><contract date="2013-09-01T00:00:00"/><contract date="2013-10-01T00:00:00"/><contract date="2013-11-01T00:00:00"/><contract date="2013-12-01T00:00:00"/><contract date="2014-01-01T00:00:00"/><contract date="2014-02-01T00:00:00"/><contract date="2014-04-01T00:00:00"/><contract date="2014-05-01T00:00:00"/><contract date="2014-06-01T00:00:00"/><contract date="2014-08-01T00:00:00"/><contract date="2014-12-01T00:00:00"/><contract date="2015-12-01T00:00:00"/>
Можно ли оставлять только те строки, где есть PNTvolume? Заранее спасибо)
0
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
21.05.2014, 19:10  [ТС]
Вот отфильтрованный файл Отфильтрованный.rar
0
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
21.05.2014, 22:17  [ТС]
vJRoF, Все таки нужна Ваша помощь с кнопками. Смог лишь сделать кнопку, выбирающая файл, а вот сохраненный файл не могу деть)) И если можно улучшите код, чтоб пустые строки убирались с <contract date="2013-02-01T00:00:00"/> к примеру. Вот мой код с кнопкой))
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
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            string filePath;
            dlg.Filter = "XML Files(*.xml)|*.xml| All Files(*.*)|*.*";
 
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                filePath = dlg.FileName.ToString();
       
                string strText = string.Empty;
                try
                {
                        using (StreamReader sr = new StreamReader(filePath))
                        {
                            XDocument doc = XDocument.Parse(sr.ReadToEnd());
                            doc.Descendants("Strike").Where(elem => float.Parse(elem.Attribute("PntVolume").Value) <= 0).Remove();
                            Console.WriteLine(doc.ToString());
                            Console.ReadLine();
                            doc.Save("Отфильтрованный.xml");
                        }
                }
                catch (Exception Ex)
                {
                    MessageBox.Show(Ex.Message);
                }
            }
        }
    }
}
0
13 / 13 / 8
Регистрация: 11.10.2013
Сообщений: 102
22.05.2014, 09:52
Лучший ответ Сообщение было отмечено GabrielGrey как решение

Решение

GabrielGrey, сохранение почти не отличается от загрузки. Единственное, сам XDocument надо вынести в область видимости обоих обработчиков:
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
using System;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using System.Xml.Linq;
 
namespace WindowsFormsApplication5 {
    public partial class Form1 : Form {
        XDocument doc = null;
 
        public Form1() {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e) {
            try {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Filter = "XML Files(*.xml)|*.xml| All Files(*.*)|*.*";
                if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
                    using (StreamReader sr = new StreamReader(ofd.FileName)) {
                        doc = XDocument.Parse(sr.ReadToEnd());
                        doc.Descendants("Strike").Where(Strike => float.Parse(Strike.Attribute("PntVolume").Value) <= 0).Remove();
                        doc.Descendants("contract").Where(contract => contract.Nodes().Count() == 0).Remove();
                        doc.Descendants("option").Where(option => option.Nodes().Count() == 0).Remove();
                        richTextBox1.Text = doc.ToString();
                    }
                }
            }
            catch (Exception ex) {
                MessageBox.Show(ex.Message);
            }
        }
 
        private void button2_Click(object sender, EventArgs e) {
            try {
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "XML Files(*.xml)|*.xml| All Files(*.*)|*.*";
                if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
                    doc.Save(sfd.FileName);
                }
            }
            catch (Exception ex) {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
Пустые опционы тоже отфильтровал.
1
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
22.05.2014, 10:14  [ТС]
Не могу скомпелировать выдает ошибку "WindowsFormApplication5.Form1" не содержит определения для "Form1_Load" и не был найден метод расширения "Form1_Load", принимающий тип "WindowsFormApplication5.Form1" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
Может скинете проект на почту или через скайп?)
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
22.05.2014, 10:18
GabrielGrey, если на ошибку мышкой два раза нажать, она перекинет Вас в дизайнер, где будет строка вида
C#
1
this.Load += new System.EventHandler(this.Form1_Load);
Её и надо удалить.
0
13 / 13 / 8
Регистрация: 11.10.2013
Сообщений: 102
22.05.2014, 10:22
GabrielGrey, и ещё (если дело не исключительно в этом) у Вас пространство имён другое. Попробуйте поменять в том коде, что вы вставили отсюда в свой проект WindowsFormApplication5 на WindowsFormApplication1.
0
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
22.05.2014, 10:30  [ТС]
vJRoF, Спасибо все работает как надо Можно ли в колонке "Name" оставлять только "OG PUT GOLD OPTIONS" и "OG CALL GOLD OPTIONS". Я был бы очень счастлив)))
0
13 / 13 / 8
Регистрация: 11.10.2013
Сообщений: 102
22.05.2014, 10:50
GabrielGrey, в смысле удалить те опционы, name у которых другой?
0
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
22.05.2014, 10:52  [ТС]
Да оставить те строки, где есть "OG PUT GOLD OPTIONS" или "OG CALL GOLD OPTIONS". А другие удалить.
0
13 / 13 / 8
Регистрация: 11.10.2013
Сообщений: 102
22.05.2014, 10:59
GabrielGrey, замените фильтр для опционов на
C#
1
doc.Descendants("option").Where(option => (option.Nodes().Count() == 0) || !((option.Attribute("name").Value == "OG PUT GOLD OPTIONS") || (option.Attribute("name").Value == "OG CALL GOLD OPTIONS"))).Remove();
0
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
22.05.2014, 11:07  [ТС]
vJRoF, Спасибо все работает ))) Не посоветуйте материал или советы, хочу сам попробывать, да и загрузил я вас уже)) Мне нужно аргументы из файла xml преобразовать по формулам и затем получившиеся аргументы сохранить в формате csv. Надеюсь Вы меня поймете .
0
13 / 13 / 8
Регистрация: 11.10.2013
Сообщений: 102
22.05.2014, 11:17
GabrielGrey, если по хорошему, то можно посмотреть на сериализацию/десереализацию в xml - напишете свой класс, подходящий по структуре к заданной xml-ке и будете гонять её туда обратно сколько угодно. В csv тем более несложно будет сериализовать, если с xml разберётесь.
А если надо по быстрому и только для этой задачи то проще, наверное, свой парсер для этого файла написать и реализовать для получающегося объекта какой-нибудь метод string ToCsv().
0
0 / 0 / 0
Регистрация: 20.05.2014
Сообщений: 17
22.05.2014, 11:22  [ТС]
Спасибо еще раз, Вы мне очень помогли) Как мне Вам репутацию повысить?)

Все нашел))

Тему можно закрывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.05.2014, 11:22
Помогаю со студенческими работами здесь

Как можно присвоить значение атрибута одного XML файла атрибута из другого XML файла?
привет, при генерации с помощью SAX некоторого xml файла, как можно присвоить точно такое же значение аттрибуту этого файла аттрибута из...

Чтение XML файла, без использования встроенных средств работы с XML
Разработать программу на любом из перечисленных языков программирования c#. Программа должна читать XML-файл. Разбирать элементы не...

Какой указать путь до файла /res/xml/filename.xml?
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); File file = new File(&quot;list13&quot;); ...

Парсинг XML-файла с помощью LINQ to XML
Здрасивуйте. Трабл никак не могу понять в чем дело не могу считать инфу с XML login, getWorkersOUs надо записать в textBox а все c...

Удалить элемент из XML файла LINQ to XML
Подскажите как из дерева XML удалить элемент &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot; ?&gt; &lt;Object...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru