Всем привет. Иногда случается так, что нам срочно требуется XML редактор для какого-либо модуля разрабатываемой системы. Требования к редактору могут быть разные - от представления XML в виде дерева до простой подсветки синтаксиса. Как реализовать подобный функционал в самые короткие сроки я расскажу ниже.
Итак, как Вы уже догадались, речь пойдет об использовании сторонних компонентов. Точнее я расскажу про 2 таких - Использование XML Notepad и ICSharpCode.AvalonEdit.
Работать будем со следующим Xml файлом
Поехали!
1. Скачать бинарник отсюда
2. Мне пришлось установить программу. Впоследствии она нам не понадобится, её можно будет удалить.
3. Зайти в папку программы (у меня это C:\Program Files (x86)\XML Notepad 2007) и забрать оттуда библиотеку Microsoft.XmlNotepad.dll - её мы и будем использовать.
4. Создаём WinForms проект. Добавляем в него только что полученную сборку. Создаём на форме 1 кнопку и вешаем на неё обработчик.
Вот код формы:
Таким образом, когда мы нажимаем на кнопку - появляется окно для выбора файла. Выбираем файл - открывается окно Xml Notepad, где этот файл можно редактировать.
Таким образом, библиотека XML Notepad позволяет легко встроить в вашу программу редактирование Xml файлов.
Итак, вот что мы сделаем:
1. Качаем последнюю версию IDE
2. Открываем любым архиватором. Нам нужна только библиотека ICSharpCode.AvalonEdit.dll
3. Создаём WPF проект. Добавляем в него библиотеку. Также нам понадобится библиотека System.Windows.Forms (это только для моей реализации. Вы можете обойтись и без неё)
4. Я не спец в WPF, так что прошу сильно не пинать. Ниже представлена разметка единственного окна в моём проекте.
Как вы можете видеть, я просто создал меню с 2мя обработчиками и текстовый редактор из нашей сборки. Основная настройка в редакторе SyntaxHighlighting="XML" - указывает какую подсветку использовать. Далее код для моего окошка:
Как видно, один обработчик для меню просто закрывает приложение, а второй показывает диалог для выбора файла, загружает контент файла и записывает его в наш редактор. После выбора файла вот как будет выглядеть приложение:
Таким образом мы получили редактор Xml с подсветкой кода и на всё это ушло пара минут!
Помимо XML библиотека ICSharpCode.AvalonEdit поддерживает подсветку синтаксиса также для C#, PHP и ещё много чего. Для этого достаточно вскрыть сборку и поглядеть, какие определения синтаксиса там есть.
Также можно использовать собственные определения для подсветки синтаксиса. Если Вас эта библиотека заинтересовала, вот документация и пример использования.
Подводя итоги, хочется заметить, что данный подход к редактированию XML позволяет быстро использовать сторонние компоненты и получить хороший функционал. Всем спасибо.
Итак, как Вы уже догадались, речь пойдет об использовании сторонних компонентов. Точнее я расскажу про 2 таких - Использование XML Notepad и ICSharpCode.AvalonEdit.
Работать будем со следующим Xml файлом
- <root>
- <books>
- <book Name="C# programming" Author="Sombody">
- </book>
- <book Name="F# programming" Author="Sombody">
- </book>
- </books>
- </root>
XML Notepad
Этот инструмент позволит нам создать полноценное окно программы XML Notepad и загрузить в него нужный нам файл. Для этого выполним следующие шаги:1. Скачать бинарник отсюда
2. Мне пришлось установить программу. Впоследствии она нам не понадобится, её можно будет удалить.
3. Зайти в папку программы (у меня это C:\Program Files (x86)\XML Notepad 2007) и забрать оттуда библиотеку Microsoft.XmlNotepad.dll - её мы и будем использовать.
4. Создаём WinForms проект. Добавляем в него только что полученную сборку. Создаём на форме 1 кнопку и вешаем на неё обработчик.
Вот код формы:
- using System;
- using System.Windows.Forms;
- using XmlNotepad;
- namespace XmlNotepadSample
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- var openFileDialog = new OpenFileDialog();
- var result = openFileDialog.ShowDialog();
- if (result == DialogResult.OK && openFileDialog.CheckFileExists)
- {
- var form = new FormMain();
- form.Open(openFileDialog.FileName);
- form.ShowDialog();
- }
- }
- }
- }
Таким образом, библиотека XML Notepad позволяет легко встроить в вашу программу редактирование Xml файлов.
ICSharpCode.AvalonEdit
Это библиотека из популярной IDE SharpDevelop. Она использует WPF и реализует функционал редактирования с поддержкой intellisense и подсветкой кода. В рамках данной записи я только покажу, как использовать подсветку и не более, так как полное описание этой библиотеки займет много времени.Итак, вот что мы сделаем:
1. Качаем последнюю версию IDE
2. Открываем любым архиватором. Нам нужна только библиотека ICSharpCode.AvalonEdit.dll
3. Создаём WPF проект. Добавляем в него библиотеку. Также нам понадобится библиотека System.Windows.Forms (это только для моей реализации. Вы можете обойтись и без неё)
4. Я не спец в WPF, так что прошу сильно не пинать. Ниже представлена разметка единственного окна в моём проекте.
- <Window x:Class="ICSharpCode.AvalonEditSample.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- Title="MainWindow" Height="350" Width="525">
- <Grid>
- <Grid Height="Auto" Width="Auto">
- <Grid.RowDefinitions>
- <RowDefinition Height="20"></RowDefinition>
- <RowDefinition Height="Auto"></RowDefinition>
- </Grid.RowDefinitions>
- <Menu Grid.Row="0"
- Height="23" HorizontalAlignment="Left" Margin="12,0,0,0" Name="menu1" VerticalAlignment="Top" Width="200">
- <MenuItem Header="Open" Click="MenuItem_Click_1" />
- <MenuItem Header="Exit" Click="MenuItem_Click" />
- </Menu>
- <avalonEdit:TextEditor Grid.Row="1"
- xmlns:avalonEdit="http://icsharpcode.net/sharpdevelop/avalonedit"
- Name="textEditor"
- FontFamily="Consolas"
- SyntaxHighlighting="XML"
- FontSize="10pt"/>
- </Grid>
- </Grid>
- </Window>
- using System.IO;
- using System.Windows;
- using System.Windows.Forms;
- namespace ICSharpCode.AvalonEditSample
- {
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- }
- private void MenuItem_Click(object sender, RoutedEventArgs e)
- {
- Close();
- }
- private void MenuItem_Click_1(object sender, RoutedEventArgs e)
- {
- var openFileDialog = new OpenFileDialog();
- var result = openFileDialog.ShowDialog();
- if (result == System.Windows.Forms.DialogResult.OK && openFileDialog.CheckFileExists)
- {
- var text = File.ReadAllText(openFileDialog.FileName);
- textEditor.Text = text;
- }
- }
- }
- }
Таким образом мы получили редактор Xml с подсветкой кода и на всё это ушло пара минут!
Помимо XML библиотека ICSharpCode.AvalonEdit поддерживает подсветку синтаксиса также для C#, PHP и ещё много чего. Для этого достаточно вскрыть сборку и поглядеть, какие определения синтаксиса там есть.
Также можно использовать собственные определения для подсветки синтаксиса. Если Вас эта библиотека заинтересовала, вот документация и пример использования.
Подводя итоги, хочется заметить, что данный подход к редактированию XML позволяет быстро использовать сторонние компоненты и получить хороший функционал. Всем спасибо.
Как насчет лицензий к этим продуктам? Они разрешают вот так вот использовать сборки?
ОтветитьУдалитьXML Notepad распространяется под лицензией
ОтветитьУдалитьMicrosoft Public License (Ms-PL),
AvalonEdit под GNU LGPL. Обе, насколько я понимаю, позволяют использовать продукты в коммерческих и некоммерческих целях (я не спец по лицензированию, так что подробнее погляди по ссылкам, что я привел)