How can I use AvalonEdit to edit XML files

2019-07-04 04:24发布

I would like to include an XML editor in my app - similar to VS's XML editor with auto-coloring, etc.

AvalonEdit sounds like a great solution.

However, AvalonEdit comes with a sample for C# syntax, not XML syntax. Is there a sample for XML syntax somewhere?

2条回答
Deceive 欺骗
2楼-- · 2019-07-04 05:02

All you have to do is change the xshd file in Avalon to change it to the language requirements you need. Many of the common language syntax highlighting is already provided on the SharpDevelop Git: Link

For XML, the xshd file looks like:

<SyntaxDefinition name="XML"     extensions=".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;.xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;.booproj;.build;.xfrm;.targets;.xaml;.xpt;.xft;.map;.wsdl;.disco;.ps1xml;.nuspec" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
<Color foreground="Green" name="Comment" exampleText="&lt;!-- comment --&gt;" />
<Color foreground="Blue" name="CData" exampleText="&lt;![CDATA[data]]&gt;" />
<Color foreground="Blue" name="DocType" exampleText="&lt;!DOCTYPE rootElement&gt;" />
<Color foreground="Blue" name="XmlDeclaration" exampleText='&lt;?xml version="1.0"?&gt;' />
<Color foreground="DarkMagenta" name="XmlTag" exampleText='&lt;tag attribute="value" /&gt;' />
<Color foreground="Red" name="AttributeName" exampleText='&lt;tag attribute="value" /&gt;' />
<Color foreground="Blue" name="AttributeValue" exampleText='&lt;tag attribute="value" /&gt;' />
<Color foreground="Teal" name="Entity" exampleText="index.aspx?a=1&amp;amp;b=2" />
<Color foreground="Olive" name="BrokenEntity" exampleText="index.aspx?a=1&amp;b=2" />

<RuleSet>
    <Span color="Comment" multiline="true">
        <Begin>&lt;!--</Begin>
        <End>--&gt;</End>
    </Span>
    <Span color="CData" multiline="true">
        <Begin>&lt;!\[CDATA\[</Begin>
        <End>]]&gt;</End>
    </Span>
    <Span color="DocType" multiline="true">
        <Begin>&lt;!DOCTYPE</Begin>
        <End>&gt;</End>
    </Span>
    <Span color="XmlDeclaration" multiline="true">
        <Begin>&lt;\?</Begin>
        <End>\?&gt;</End>
    </Span>
    <Span color="XmlTag" multiline="true">
        <Begin>&lt;</Begin>
        <End>&gt;</End>
        <RuleSet>
            <!-- Treat the position before '<' as end, as that's not a valid character
                 in attribute names and indicates the user forgot a closing quote. -->
            <Span color="AttributeValue" multiline="true" ruleSet="EntitySet">
                <Begin>"</Begin>
                <End>"|(?=&lt;)</End>
            </Span>
            <Span color="AttributeValue" multiline="true" ruleSet="EntitySet">
                <Begin>'</Begin>
                <End>'|(?=&lt;)</End>
            </Span>
            <Rule color="AttributeName">[\d\w_\-\.]+(?=(\s*=))</Rule>
            <Rule color="AttributeValue">=</Rule>
        </RuleSet>
    </Span>
    <Import ruleSet="EntitySet"/>
</RuleSet>

<RuleSet name="EntitySet">
    <Rule color="Entity">
        &amp;
        [\w\d\#]+
        ;
    </Rule>

    <Rule color="BrokenEntity">
        &amp;
        [\w\d\#]*
        #missing ;
    </Rule>
</RuleSet>
</SyntaxDefinition>
查看更多
女痞
3楼-- · 2019-07-04 05:03

Just use SyntaxHighlighting="XML" in your XAML:

xmlns:avalonedit="http://icsharpcode.net/sharpdevelop/avalonedit"
...
<StackPanel>
    <avalonedit:TextEditor SyntaxHighlighting="XML"/>
</StackPanel>
查看更多
登录 后发表回答