Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.90/10: Рейтинг темы: голосов - 10, средняя оценка - 4.90
wachburn
19 / 19 / 4
Регистрация: 29.10.2009
Сообщений: 150
1

Отформатировать XML

27.04.2011, 11:51. Просмотров 1843. Ответов 6
Метки нет (Все метки)

Есть XML вида:
XML
1
2
3
<object   attr="someAttr">
   <inner>text</inner>
</object>
и таких файлов много.
Необходимо переобразовать его в красивый (или не в красивый) файл по строго определенному единому формату, т.е. либо убрать лишние пробелы (перед attr например) и все сделать в одну строку, либо создать красивый XML, но чтоб поступающие файлы форматировались по единому правилу. Подскажите в какую либу смотреть.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2011, 11:51
Ответы с готовыми решениями:

Отформатировать текст
Допустим дан произвольный текст: Петров вася иванович; 20;test@mail.ru...

Как отформатировать с выравниванием?
имеются три переменные: ulong (0 to 38) string (size 0 to 10) double (0.0 to...

Отформатировать правильно инициалы
Пытаюсь сделать помощника при вводе инициалов Нужно вводить вручную кучу...

Как отформатировать текст
Допустим у меня есть текст &quot;Ваш ключ: WHWJHJFHDGF2&quot; , нужно отформатировать...

Отформатировать число, разделив на разряды
Ребята, помогите пожалуйста. Поставлена такая задача. Дано число, к примеру,...

6
znake
гроза ленивых студентов
450 / 405 / 51
Регистрация: 27.03.2011
Сообщений: 823
27.04.2011, 11:55 2
если единый файл со строгим форматом - я бы попробовал посмотреть в сторону сериализации...
если без сериализации - в сторону System.Xml и System.Xml.Linq
0
Konctantin
940 / 744 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
27.04.2011, 12:06 3
А если все разные? трабл только с пробелами...
Вообще-то тут не надо никаких сериализаторов/десериализаторов, да и С# тут тоже не надо.
NotePad++ в зубы, Ctrl+R и читаем про регэкспы...
0
wachburn
19 / 19 / 4
Регистрация: 29.10.2009
Сообщений: 150
27.04.2011, 12:32  [ТС] 4
Цитата Сообщение от znake Посмотреть сообщение
если единый файл со строгим форматом - я бы попробовал посмотреть в сторону сериализации...
если без сериализации - в сторону System.Xml и System.Xml.Linq
структура XML одинаковая, вы это имеете ввиду? все, что нужно, это переобразовать эти файлы в идентичный вид. Т.е. если есть два вот таких файла:
XML
1
2
3
<object   attr="someAttr">
   <inner>text</inner>
</object>
XML
1
2
3
<object attr="someAttr">
   <inner>  text</inner   >
</object>
то нужно получить на выходе два одинаково сформированных, либо так:
XML
1
2
3
<object attr="someAttr">
   <inner>text</inner>
</object>
либо так:
XML
1
<object attr="someAttr"><inner>text</inner></object>
мне потом нужно будет сравнивать их хэши: одинаковые ли в них данные или нет. Если в одном из двух файлов будет стоять лишний пробел - хэш уже будет полюбому другой. Причем в одном файле может быть два элемента object которые нужно сравнивать, так что выцеплять по одиночку и сравнивать необходимо именно кусок файла, а не сами файлы. Для этого мне и необходимо привести их в единый вид.
0
znake
гроза ленивых студентов
450 / 405 / 51
Регистрация: 27.03.2011
Сообщений: 823
27.04.2011, 14:05 5
ну чтож...я уже сказал оба пути, по которым можно решить проблему...примеры использования обоих путей на форуме (да и в интернете в целом) есть... дерзай...
0
wachburn
19 / 19 / 4
Регистрация: 29.10.2009
Сообщений: 150
27.04.2011, 15:14  [ТС] 6
Цитата Сообщение от znake Посмотреть сообщение
ну чтож...я уже сказал оба пути, по которым можно решить проблему...примеры использования обоих путей на форуме (да и в интернете в целом) есть... дерзай...
да о пространстве имен xml я конечно же знаю, но примеров не нашел на форуме.
0
znake
гроза ленивых студентов
450 / 405 / 51
Регистрация: 27.03.2011
Сообщений: 823
27.04.2011, 15:20 7
пример чтения с занесением в датагрид
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
                XDocument xml_document = XDocument.Load(filepath);
                XElement root = xml_document.Root;
                int i;
                foreach (XElement query_element in root.Elements("query"))
                {
                    i = 0;
                    data_grid_for_scripts.Rows.Add();
                    foreach (XElement part_element in query_element.Elements())
                    {
                        data_grid_for_scripts.Rows[data_grid_for_scripts.Rows.Count - 1].Cells[i].Value = part_element.Value.ToString();
                        i = i + 1;
                    }
                }


пример записи из датагрида
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
                //пишем шапку ХМЛ-ки
                XmlDocument xml_document = new XmlDocument();
                XmlDeclaration xml_declaration = xml_document.CreateXmlDeclaration("1.0", "UTF-8", String.Empty);
                XmlElement root = xml_document.CreateElement("root");
                xml_document.AppendChild(root);
                xml_document.InsertBefore(xml_declaration, root);
 
                //Добавляем элементы в корневой узел
                foreach (DataGridViewRow str in data_grid_for_scripts.Rows)
                {
                    XmlElement query_element = xml_document.CreateElement("query");
                    root.AppendChild(query_element);
                    XmlElement name_element = xml_document.CreateElement("name");
                    query_element.AppendChild(name_element);
                    XmlText name_value = xml_document.CreateTextNode(str.Cells[0].Value.ToString());
                    name_element.AppendChild(name_value);
                    XmlElement scheme_element = xml_document.CreateElement("scheme");
                    query_element.AppendChild(scheme_element);
                    XmlText scheme_value = xml_document.CreateTextNode(str.Cells[1].Value.ToString());
                    scheme_element.AppendChild(scheme_value);
                    XmlElement script_element = xml_document.CreateElement("script");
                    query_element.AppendChild(script_element);
                    XmlText script_value = xml_document.CreateTextNode(str.Cells[2].Value.ToString());
                    script_element.AppendChild(script_value);
                    XmlElement note_element = xml_document.CreateElement("note");
                    query_element.AppendChild(note_element);
                    XmlText note_value = xml_document.CreateTextNode(str.Cells[3].Value.ToString());
                    note_element.AppendChild(note_value);
                }
                //Сохраняем
                xml_document.Save(filepath);


та XML с которой велась работа
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <query>
    <name>запрос 1</name>
    <scheme>схема1</scheme>
    <script>текст селект блабла</script>
    <note>заметка</note>
  </query>
  <query>
    <name>запрос 2</name>
    <scheme>схема2</scheme>
    <script>select * фром чегонибудь</script>
    <note>еще что-то</note>
  </query>
</root>


вот пример (это не пример того как надо делать - я тогда сам лишь пробовал)...но помочь разобраться это сможет...
0
27.04.2011, 15:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2011, 15:20

Отформатировать NTFS без использования консоли
Привет. Нужно отформатировать NTFS без использования консоли. От нее решил...

Отформатировать заданный массив строк по ширине
Заданный массив строк произвольной длины. Отформатировать заданный массив строк...

Отформатировать текст с фиксацией его ширины
C# Дано целое число K (&gt; 25) и текстовый файл, содержащий текст, вы- ровненный...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru