# Options of the XML parsers

The XML parser has the following options.

## drop-invalid

|   
---|---  
Synopsis: | drop-invalid()  
Format: | `yes  
Default: | no  
Mandatory: | no  
  
_Description:_ If set, messages with an invalid XML will be dropped entirely.

## exclude-tags

Synopsis: | exclude-tags()  
---|---  
Format: | list of globs  
Default: | None If not set, no filtering is done.  
Mandatory: | no  
  
_Description:_ The XML parser matches tags against the listed globs. If there is a match, the given subtree of the XML will be omitted.

## Example: Using exclude_tags
```
       parser xml_parser {
            xml(
                template("$MSG")
                exclude-tags("tag1", "tag2", "inner*")
            );
        };
    
```

From this XML input:
```
 
       <tag1>Text1</tag1><tag2>Text2</tag2><tag3>Text3<innertag>TextInner</innertag></tag3>
    
```

The following output is generated:
```
 
       {"_xml":{"tag3":"Text3"}}
    
```

## prefix()

|   
---|---  
Synopsis: | prefix()  
  
_Description:_ Insert a prefix before the name part of the parsed name-value pairs to help further processing. For example:

  * To insert the `my-parsed-data.` prefix, use the `prefix(my-parsed-data.)` option.
  * To refer to a particular data that has a prefix, use the prefix in the name of the macro, for example, `${my-parsed-data.name}`.
  * If you forward the parsed messages using the IETF-syslog protocol, you can insert all the parsed data into the SDATA part of the message using the `prefix(.SDATA.my-parsed-data.)` option.



Names starting with a dot (for example, `.example`) are reserved for use by AxoSyslog. If you use such a macro name as the name of a parsed value, it will attempt to replace the original value of the macro (note that only soft macros can be overwritten, see [Hard versus soft macros](../../../docs/axosyslog-core/chapter-manipulating-messages/customizing-message-format/macros-hard-vs-soft/index.md) for details). To avoid such problems, use a prefix when naming the parsed values, for example, `prefix(my-parsed-data.)`

The `prefix()` option is optional and its default value is `".xml"`.

## strip-whitespaces

|   
---|---  
Synopsis: | strip-whitespaces()  
Format: | `yes  
Default: | no  
Mandatory: | no  
  
_Description:_ Strip the whitespaces from the XML text nodes before adding them to the message.

## Example: Using strip-whitespaces
```
       parser xml_parser {
            xml(
                template("$MSG")
                strip-whitespaces(yes)
            );
        };
    
```

From this XML input:
```
 
       <tag1> Tag </tag1>
    
```

The following output is generated:
```
 
       {"_xml":{"tag1":"Tag"}}
    
```

## template()

|   
---|---  
Synopsis: | `template("${<macroname>}")`  
  
_Description:_ The macro that contains the part of the message that the parser will process. It can also be a macro created by a previous parser of the log path. By default, the parser processes the entire message (`${MESSAGE}`).

Last modified June 18, 2024: [Formatting fixes in tables (35deec1)](<https://github.com/axoflow/axosyslog-core-docs/commit/35deec1ff2e5255666ecb03a144a24a9fd73bc2e>)