Click here to Skip to main content
12,508,925 members (36,847 online)
Click here to Skip to main content
Add your own
alternative version

Tagged as

Stats

50.5K views
27 bookmarked
Posted

XML Editor Control

, 2 Apr 2010 CPOL
Rate this:
Please Sign up or sign in to vote.
XML Editor with syntax highlighting

If you have a Windows Forms application that involves XML editing or viewing, you can use this control to save yourself the effort of formatting the XML content. For now, only syntax highlighting is implemented. I expect to add more features in the future like spacing, grouping, intellisense, etc…

Usage

Simply add the files (XmlToken.cs, XmlTokenizer.cs, XmlEditor.cs, XmlEditor.designer.cs) to your project, then drag and drop the XmlEditor control from the Toolbox into your Windows Form.

The XmlEditor control currently has three public properties. Use AllowXmlFormatting to enable or disable formatting on the XML content in the editor. The ReadOnly property tells whether or not to allow the user to change the text. The Text property sets or gets the text of the XMLeditor.

Here is how the control looks like when AllowXmlFormatting = true and ReadOnly = false (default values):

Implementation

To color the XML string, we have to split it into multiple tokens, then color each token based on its type. I have identified the following token types (based on syntax highlighting behavior in Visual Studio 2008):

  • A “Value” is anything between double quotes
  • A “Comment” is anything that starts with <!– and ends with –> (or starts with <!– and is never closed with –>)
  • An “Element” is any letter or digit that falls between < and a space or >
  • An “Attribute” is any letter or digit that falls after a < followed by space and not closed by >
  • An “Escape” is anything that starts with & and ends with ; (For example &quote;)
  • A “SpecialChar” is any character that is not a letter or a digit
  • A “None” is anything else

The Tokenize() public static method of the XmlTokenizer class does the job of splitting a string into XML tokens.

An XmlToken object is a representation of an XML token with details about the exact text of that token, its location in the string and its type.

Here is the code in the XmlEditor control that does the syntax highlighting:

List<XmlToken> tokens = XmlTokenizer.Tokenize(xmlEditor.Text);

foreach (XmlToken token in tokens)
{
    xmlEditor.Select(token.Index, token.Text.Length);

    switch (token.Type)
    {
        case XmlTokenType.Attribute:
            xmlEditor.SelectionColor = Color.Red;
            break;
        case XmlTokenType.Comment:
            xmlEditor.SelectionColor = Color.DarkGreen;
            break;

        //  and so on for the other token types
    }
}

You can look at the code on my GitHub page.


Filed under: csharp, WinForms, XML

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Ali BaderEddin
Software Developer Qualtrics
United States United States
https://about.me/ali.b

You may also be interested in...

Pro
Pro

Comments and Discussions

 
GeneralThanks Pin
Ritesh Man Chtirakar23-Sep-15 19:03
memberRitesh Man Chtirakar23-Sep-15 19:03 
GeneralRe: Thanks Pin
Ali BaderEddin8-Oct-15 8:11
memberAli BaderEddin8-Oct-15 8:11 
GeneralMy vote of 1 Pin
Member 1136719531-Jan-15 6:21
memberMember 1136719531-Jan-15 6:21 
GeneralRe: My vote of 1 Pin
Ali BaderEddin31-Jan-15 13:40
memberAli BaderEddin31-Jan-15 13:40 
QuestionAdd this to auto complete tags Pin
poteb7-Aug-12 3:21
memberpoteb7-Aug-12 3:21 
AnswerRe: Add this to auto complete tags Pin
Ali BaderEddin7-Aug-12 7:12
memberAli BaderEddin7-Aug-12 7:12 
QuestionThanks for sharing Pin
hbehar5-Jul-12 1:21
memberhbehar5-Jul-12 1:21 
QuestionPass text to control for formatting Pin
ijourneaux25-Dec-11 5:48
memberijourneaux25-Dec-11 5:48 
QuestionHighlighting is very slow Pin
mubed1-Dec-11 1:28
membermubed1-Dec-11 1:28 
AnswerRe: Highlighting is very slow Pin
Ali BaderEddin2-Dec-11 19:41
memberAli BaderEddin2-Dec-11 19:41 
GeneralMy vote of 5 Pin
AndyTanYuLin28-Nov-11 20:16
memberAndyTanYuLin28-Nov-11 20:16 
QuestionGreat tool - When is next update Pin
zzfive00320-Sep-11 7:48
memberzzfive00320-Sep-11 7:48 
AnswerRe: Great tool - When is next update Pin
Ali BaderEddin24-Sep-11 18:14
memberAli BaderEddin24-Sep-11 18:14 
QuestionNice Pin
shelby6716-Aug-11 18:22
membershelby6716-Aug-11 18:22 
AnswerRe: Nice Pin
Ali BaderEddin20-Aug-11 21:50
memberAli BaderEddin20-Aug-11 21:50 
GeneralCrashed with lots of characters Pin
zhanghaocol25-Oct-10 22:06
memberzhanghaocol25-Oct-10 22:06 
GeneralRe: Crashed with lots of characters Pin
Ali BaderEddin26-Oct-10 11:03
memberAli BaderEddin26-Oct-10 11:03 
GeneralUndo is completely broken Pin
nikdownload25-Sep-10 6:44
membernikdownload25-Sep-10 6:44 
GeneralRe: Undo is completely broken Pin
Ali BaderEddin24-Oct-10 10:17
memberAli BaderEddin24-Oct-10 10:17 
GeneralWeb based XML Editor Control Pin
UdayanDas22-Jul-10 0:00
memberUdayanDas22-Jul-10 0:00 
GeneralGreat control Pin
ruben ruvalcaba6-Apr-10 4:16
memberruben ruvalcaba6-Apr-10 4:16 
GeneralRe: Great control Pin
Ali BaderEddin6-Apr-10 7:23
memberAli BaderEddin6-Apr-10 7:23 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.160927.1 | Last Updated 3 Apr 2010
Article Copyright 2010 by Ali BaderEddin
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid