Skip to content

Repository files navigation

Pretty XML

logo

What is it?

Features
1. Prettify XML (XML Formatting)
2. Pretty XML: Minimize

Keyboard Shortcuts

Settings

Requirements

Installation

Known Issues

Change Log

For more information

What is it?

Pretty XML is a XML formatter extension for Visual Studio Code and VSCodium. It formats XML documents just like Visual Studio on Windows.

Supported file extensions:

  • xml
  • xaml
  • axml
  • xsd
  • xsl
  • plist
  • mobileconfig
  • config
  • csproj
  • svg
  • resx and all other XML type of files.

There is also Visual Studio for Mac version of this extension. Check it out at PrettyXML.VSMac

Suggestions, improvement PRs are welcome.

LicenseDeploy

Visual Studio Marketplace VersionInstallsDownloadsRating

Open VSXDownloadsRating

prettify gif.


Features

1. Prettify XML (XML Formatting)

Right Click and Select Prettify XML or use shortcut

  • Position each attribute on a separate line.
  • First attribute on same line as start element start tag.
  • All attributes indented aligning with first attribute.
  • If no child for an element then close inline end tag.
  • No empty lines.
  • Supports ' and whitespace unicodes in attribute value for XAML parser compatibility.

1.a. Format Entire Document

  • Lets you format entire valid XML document.

1.b. Format Selection - Beta

  • Lets you format part of an XML document. XML can be partial and invalid. This is in beta, so feel free to submit pull request with improvements.

Format Selection Screenshot

Before

Before.

After

After.

2. Pretty XML: Minimize

Minimizes XML.

minimize gif.


Keyboard Shortcuts

Command Platform Shortcut
Prettify XML Mac Cmd+K L
Prettify XML Windows, Linux Control+K L
PrettyXML: Minimize Mac Cmd+K `
PrettyXML: Minimize Windows, Linux Control+K `

Note

You can change these in Preferences → Keyboard Shortcuts if you want.


Settings

These will be for Prettify XML command.

Setting Key Default Value Description
prettyxml.settings.indentSpaceLength 4 No. of spaces for indentation.
prettyxml.settings.useSingleQuotes false Use ' instead of "
prettyxml.settings.useSelfClosingTag true If no child nodes then self closing tag />
prettyxml.settings.formatOnSave false Enable format on save
prettyxml.settings.allowSingleQuoteInAttributeValue true Allows ' in attribute values instead of '
prettyxml.settings.addSpaceBeforeSelfClosingTag true Adds space before self closing tag
prettyxml.settings.wrapCommentTextWithSpaces true Wraps comment text with a single space
prettyxml.settings.allowWhiteSpaceUnicodesInAttributeValues true Allows white space unicodes in attribute values
prettyxml.settings.positionFirstAttributeOnSameLine true Position first attribute on same line.
prettyxml.settings.positionAllAttributesOnFirstLine false Position all attributes on first line
prettyxml.settings.preserveWhiteSpacesInComment false Preserves whitespaces in a comment.
prettyxml.settings.addSpaceBeforeEndOfXmlDeclaration false Add space before end of XML declaration.
prettyxml.settings.addXmlDeclarationIfMissing true Add XML declaration if missing.
prettyxml.settings.attributesInNewlineThreshold 1 Attributes count threshold to position attributes in newlines.
prettyxml.settings.enableLogs false Enables logs
prettyxml.settings.wildCardedExceptionsForPositionAllAttributesOnFirstLine Array<string> Wild card exceptions for elements to ignore positionAllAttributesOnFirstLine
prettyxml.settings.addEmptyLineBetweenElements false Add empty line between elements if the child count is greater than 2
prettyxml.settings.addEmptyEol false Add empty EOL to files if it does not exist.
prettyxml.settings.preserveNewLines false Preserve existing new lines between elements.
prettyxml.settings.preserveCommentPlacement false Preserve comment line placement.
prettyxml.settings.escapeInvisibleNonAsciiCharacters false Escape invisible non-ASCII characters as character references.

The PrettyXML settings pane in the VS Code settings UI.

The top of the settings pane. Each entry carries its default and, where it helps, a worked example. The table above is the complete list - search prettyxml in Settings to scroll through them all.

Attributes In Newline Threshold

Example:

Value = 2

Input 1

<Element Attribute1="Value1" Attribute2="Value2" />

Output 1

<Element Attribute1="Value1" Attribute2="Value2" />

Input 2

<Element Attribute1="Value1" Attribute2="Value2" Attribute3="Value3" />

Output 2

<Element Attribute1="Value1"
         Attribute2="Value2"
         Attribute3="Value3"/>

Wild Carded Exceptions For Position All Attributes On First Line

List of element names to ignore Position All Attributes On First Line setting. Include element names or patterns here.

Example:

 "prettyxml.settings.wildCardedExceptionsForPositionAllAttributesOnFirstLine": ["Content*"]

Input 3

<View>
    <Content X="X"
             Y="Y" Z="Z">
        <Label text="{i18>LabelText}" />
        <Input id="Input1" 
               value="{service>description}" />
    </Content>
</View>

Ouput 3

<View>
    <Content X="X"
             Y="Y"
             Z="Z">
        <Label text="{i18>LabelText}" />
        <Input id="Input1" value="{service>description}" />
    </Content>
</View>

Add Empty Line Between Elements

If enabled, and child elements count is greater than 2 then adds empty line between elements.

Note

Please note it wont add empty element before first element and after last element.

Input 4

<Root>
<Element1>Text1</Element1>
<Element2>Text2</Element2>
<Element3>Text3</Element3>
</Root>

Output 4

<Root>
    <Element1>Text1</Element1>

    <Element2>Text2</Element2>

    <Element3>Text3</Element3>
</Root>

Add Xml Declaration If Missing

Adds XML declaration <?xml version="1.0" encoding="utf-8"?> if missing. Default is true.

Preserve New Lines

Preserves existing new lines between elements.

Example: Value = false

Input 5

<Root>
      <Element1>Text1</Element1>


    <Element2>Text2</Element2>

        <Element3>Text3</Element3>
    <Element3>Text4</Element3>
</Root>

Output 5

<Root>
    <Element1>Text1</Element1>
    <Element2>Text2</Element2>
    <Element3>Text3</Element3>
    <Element3>Text4</Element3>
</Root>

Example: Value = true

Input 6

<Root>
      <Element1>Text1</Element1>


    <Element2>Text2</Element2>

        <Element3>Text3</Element3>
    <Element3>Text4</Element3>
</Root>

Output 6

<Root>
    <Element1>Text1</Element1>

    
    <Element2>Text2</Element2>
        
    <Element3>Text3</Element3>
    <Element3>Text4</Element3>
</Root>

Preserve Comment Placement

Preserve existing comment line placement. Default is Unchecked

Checked : Comments remains in their original lines. Unchecked : Comments may be repositioned into other lines according to formatting rules.

Example: Value = false

Input 7

<Root>
    <Element1>Text1</Element1>  <!--A comment-->
    <Element2>Text2</Element2><!--Another comment-->
    <Element3>Text3</Element3>
</Root>

Output 7

<Root>
    <Element1>Text1</Element1>
    <!--A comment-->
    <Element2>Text2</Element2>
    <!--Another comment-->
    <Element3>Text3</Element3>
</Root>

Example: Value = true

Input 8

<Root>
    <Element1>Text1</Element1>    <!--A comment-->
    <Element2>Text2</Element2>   <!--Another comment-->
    <Element3>Text3</Element3>
</Root>

Output 8

<Root>
    <Element1>Text1</Element1><!--A comment-->
    <Element2>Text2</Element2><!--Another comment-->
    <Element3>Text3</Element3>
</Root>

Add Empty EOL

Adds an empty line (trailing newline) at the end of formatted files if one does not exist.

Default is false (Unchecked).

  • Checked (true): Ensures the formatted document ends with a trailing newline (matching CRLF or LF based on the file).
  • Unchecked (false): Preserves the original file's trailing line ending without forcing one if it did not exist.

Escape Invisible Non-ASCII Characters

Escapes the non-ASCII characters that draw nothing - non-breaking and zero-width spaces, joiners, bidi marks, the soft hyphen and the BOM - as numeric character references, so you can see what is actually in the file.

Default is false (Unchecked).

  • Checked (true): Invisible non-ASCII characters are written as &#x...; references.
  • Unchecked (false): Invisible non-ASCII characters are written as literal characters.

Characters that draw something are left literal at either setting - ü, and 😀 are never escaped.

Applies to element text and attribute values. CDATA sections and comments resolve no character references, so their contents are left untouched either way.

Tab, newline and carriage return are ASCII, and are decided by prettyxml.settings.allowWhiteSpaceUnicodesInAttributeValues instead. The two settings cover different characters and neither overrides the other.

The examples below write the invisible characters as references on the input side so they can be read - &#xA0; is a non-breaking space and &#x200B; is a zero-width space.

Example: Value = false

Input 9

<Invoice>
    <Line note="10&#xA0;km">Total&#xA0;price&#x200B;: 12 €</Line>
    <Customer>Müller</Customer>
</Invoice>

Output 9

<Invoice>
    <Line note="10 km">Total price​: 12 €</Line>
    <Customer>Müller</Customer>
</Invoice>

The non-breaking and zero-width spaces are still there - they are just indistinguishable from an ordinary space and from nothing at all.

Example: Value = true

Input 10

<Invoice>
    <Line note="10&#xA0;km">Total&#xA0;price&#x200B;: 12 €</Line>
    <Customer>Müller</Customer>
</Invoice>

Output 10

<Invoice>
    <Line note="10&#xA0;km">Total&#xA0;price&#x200B;: 12 €</Line>
    <Customer>Müller</Customer>
</Invoice>

The and the ü are visible characters, so they stay literal in both.


Requirements


Installation

Visual Studio Code - Visual Studio MarketPlace

For VSCodium - open-vsx.org


Known Issues

  • Limited DTD support.
  • Formats valid XML files only. Syntax errors are displayed.

Issues can be reported at issues section


For more information

About

Pretty XML is a XML Formatter extension for Visual Studio Code

Resources

Stars

38 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages