---
schema_version: "1"
id: 3f269fad82a775d0f1b37cf39a19c6d04a0852967a8ab3ece57a974ea07d55f2
title: Parse Template (<parse-template/>)
collection: mulesoft
version: current
locale: en-us
portal_url: https://docs.salesforce.com/mulesoft/current/en-us/anypoint-code-builder/acb-component-parse-template.md
canonical_url: https://docs.mulesoft.com/anypoint-code-builder/acb-component-parse-template
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 11dc7c747afab50d65f293d0d3f72a566e48a0ed1529bef7af4fdbed2e408e7f
description: MuleSoft Documentation Site
latest: true
---
---
product: Anypoint Code Builder
version: master
---

# Parse Template (<parse-template/>)

> For the full documentation index, see: https://docs.mulesoft.com/llms.txt

Process a template and obtain a result.

A template includes text with embedded DataWeave expressions that Mule evaluates and replaces with
their result.

Configure a template through an external file reference, or embed the template in the component
configuration.

## Component XML

This component supports the following XML structure:

```xml
<parse-template
  doc:name="Parse template"
  doc:id="fppwuw"
  location="template.html" />
```

Parse Template (`<parse-template/>`) attributes are configurable through the UI and XML.

<table><colgroup><col> <col> <col></colgroup><thead><tr><th>Attribute Name</th><th>Attribute XML</th><th>Description</th></tr></thead><tbody><tr><td><p><strong>Parse template</strong> (default)</p></td><td><p><code>doc:name</code></p></td><td><div><div><p>Editable name for the component to display in the canvas.</p></div></div></td></tr><tr><td><p>N/A</p></td><td><p><code>doc:id</code></p></td><td><div><div><p>Automatically generated identifier for the component.</p></div></div></td></tr><tr><td><p><strong>Content</strong></p></td><td><p><code>content</code></p></td><td><div><div><p>String representing the template where embedded expressions are evaluated and replaced by their results.</p></div></div></td></tr><tr><td><p><strong>Location</strong></p></td><td><p><code>location</code></p></td><td><div><div><p>Location of the template file. Mule inserts values extracted from the message properties or variables into this file.</p></div></div></td></tr><tr><td><p><strong>Output encoding</strong></p></td><td><p><code>outputEncoding</code></p></td><td><div><div><p>Encoding of the payload that this component outputs.</p></div></div></td></tr><tr><td><p><strong>Output mime type</strong></p></td><td><p><code>outputMimeType</code></p></td><td><div><div><p>MIME type of the payload that this component outputs. For more information, see <a href="https://docs.mulesoft.com/dataweave/latest/dataweave-formats#reader_writer_properties">Using Reader and Writer Properties</a>.</p></div></div></td></tr><tr><td><p><strong>Parameters</strong></p></td><td><p>N/A</p></td><td><div><div><p>Appends a key-value pair for a reader property to the value of the <code>outputMimeType</code> attribute. Multiple key-value pairs are allowed. Reader properties are specific to the MIME type. For example, see the <a href="https://docs.mulesoft.com/dataweave/latest/dataweave-formats-json#properties">JSON reader properties</a> for <code>application/json</code>. To find other reader properties, navigate to a supported format from the <a href="https://docs.mulesoft.com/dataweave/latest/dataweave-formats">DataWeave format documentation</a>, and see <a href="https://docs.mulesoft.com/dataweave/latest/dataweave-formats#reader_writer_properties">Using Reader and Writer Properties</a>.</p></div></div></td></tr><tr><td><p><strong>Target Variable</strong></p></td><td><p><code>target</code></p></td><td><div><div><p>Name of the variable in which you want to store message data. Names can only include numbers, characters, and underscores. For example, hyphens are not allowed in the name. See <a href="https://docs.mulesoft.com/mule-runtime/latest/target-variables">Enrich Data with Target Variables</a> in the Mule documentation.</p></div></div></td></tr><tr><td><p><strong>Target Value</strong></p></td><td><p><code>targetValue</code></p></td><td><div><div><p>Value of the data to store in the target variable. By default, the value is the message payload (payload). The field accepts any value that a variable accepts: any supported data type, DataWeave expressions, the keywords <code>payload</code>, <code>attributes</code>, and <code>message</code>, but not the keyword <code>vars</code>. See <a href="https://docs.mulesoft.com/mule-runtime/latest/target-variables">Enrich Data with Target Variables</a> in the Mule documentation.</p></div></div></td></tr></tbody></table>

## Examples

The following examples use Parse Template to load data dynamically into HTML.

### Example: Processing Results of a Database Query Dynamically

The following example uses Parse Template in a Mule application that loads employee data from a
database into an HTML template. The flow returns the template-built output to the caller.

```xml
<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
      xmlns:http="http://www.mulesoft.org/schema/mule/http"
      xmlns:db="http://www.mulesoft.org/schema/mule/db"
      xmlns="http://www.mulesoft.org/schema/mule/core"
      xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core
       http://www.mulesoft.org/schema/mule/core/current/mule.xsd
       http://www.mulesoft.org/schema/mule/db
       http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd
       http://www.mulesoft.org/schema/mule/http
       http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
       http://www.mulesoft.org/schema/mule/ee/core
       http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
    <db:config name="Database_Config" doc:name="Database Config" >
        <db:my-sql-connection host="localhost" port="3306" user="user"
          password="pw" database="MySQL_Data_Source" />
    </db:config>
    <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config">
        <http:listener-connection host="localhost" port="8081" />
    </http:listener-config>
    <flow name="exampleTemplateFlow1" >
        <http:listener doc:name="Listener" config-ref="HTTP_Listener_config"
          path="/getEmployee"/>
        <db:select doc:name="Select" config-ref="Database_Config">
            <ee:repeatable-file-store-iterable />
            <db:sql >SELECT * FROM Employees WHERE id=#[attributes.queryParams['id']]</db:sql>
        </db:select>
        <parse-template doc:name="Parse Template"
          location="src/main/resources/responseHtml.template"/>
    </flow>
</mule>
```

#### Template Content

The template selects fields containing name, department, job title, start date, and employee type
values from the input payload.

```html
<html>
  <body>
    <table>
      <thead>
        <tr>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Department</th>
          <th>Job Title</th>
          <th>Start Date</th>
          <th>Employee Type</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>#[payload['first_name']]</td>
          <td>#[payload['last_name']]</td>
          <td>#[payload['department']]</td>
          <td>#[payload['job_title']]</td>
          <td>#[payload['start_date']]</td>
          <td>#[payload['employee_type']]</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>
```

#### Input to Parse Template

Assume that you start the flow with a URI that contains a query parameter that identifies the ID of
an employee, such as `http://localhost:8081/getEmployee?id=1234`, and that the Select operation
returns the following input to Parse Template:

```html
{ "first_name": "Melba", "last_name": "Roy Mouton", "department": "Computers", "job_title":
"Assistant Chief of Research Programs", "start_date": "01/01/2021", "employee_type": "mathematician"
}
```

#### Output of the Template

The [example](#template) returns template-built output. The output is HTML with the selected
employee data.

```xml
<html>
  <body>
    <table>
      <thead>
        <tr>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Department</th>
          <th>Job Title</th>
          <th>Start Date</th>
          <th>Employee Type</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>"Melba"</td>
          <td>"Roy Mouton"</td>
          <td>"Computers"</td>
          <td>"Assistant Chief of Research Programs"</td>
          <td>"01/01/2021"</td>
          <td>"mathematician"</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>
```

### Dynamically Generating Data in HTML Rows

The following example uses Parse Template on employee records that are represented as an array of
objects.

```xml
<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
      xmlns:http="http://www.mulesoft.org/schema/mule/http"
      xmlns="http://www.mulesoft.org/schema/mule/core"
      xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core
      http://www.mulesoft.org/schema/mule/core/current/mule.xsd
      http://www.mulesoft.org/schema/mule/http
      http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
      http://www.mulesoft.org/schema/mule/ee/core
      http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
	<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener
   config" >
		<http:listener-connection host="0.0.0.0" port="8081" />
	</http:listener-config>
	<flow name="exampleTemplateFlow" >
		<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/parseit"/>
		<set-payload doc:name="Set Payload" value='#[{
	Employee: [

			{
				"first_name" : "Melba",
				"last_name" : "Roy Mouton",
				"department" : "Computers",
				"job_title" : "Assistant Chief of Research Programs",
				"start_date" : "01/01/2021",
				"employee_type" : "mathematician"

			},
			{
				"first_name" : "Annie",
				"last_name" : "Easley",
				"department" : "Software Development",
				"job_title" : "Technical Lead",
				"start_date" : "06/02/2020",
				"employee_type" : "Rocket Scientist"

			}

	]
}]'/>
		<parse-template doc:name="Parse Template" location="/path/to/my.template">
		</parse-template>
		<logger level="INFO" doc:name="Logger" message="#[payload]"/>
	</flow>
</mule>
```

#### Template Content

The following template uses a DataWeave script to iterate over the input array and construct an HTML
row for each object in the array:

```html
<html>
  <body>
    <table>
      <thead>
        <tr>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Department</th>
          <th>Job Title</th>
          <th>Start Date</th>
          <th>Employee Type</th>
        </tr>
      </thead>
      <tbody>
        #[%dw 2.0 output application/java --- payload.*Employee[0] map ((item) -> "
        <tr>
          <td><span>" ++ (item.first_name default "") ++ "</span></td>
          <td><span>" ++ (item.last_name default "") ++ "</span></td>
          <td><span>" ++ (item.department default "") ++ "</span></td>
          <td><span>" ++ (item.job_title default "") ++ "</span></td>
          <td><span>" ++ (item.start_date default "") ++ "</span></td>
          <td><span>" ++ (item.employee_type default "") ++ "</span></td>
        </tr>
        ") joinBy ""]
      </tbody>
    </table>
  </body>
</html>
```

#### Input to Parse Template

Assume that Parse Template component receives the following payload from Set Payload:

```html
{ Employee: [ { "first_name" : "Melba", "last_name" : "Roy Mouton", "department" : "Computers",
"job_title" : "Assistant Chief of Research Programs", "start_date" : "01/01/2021", "employee_type" :
"mathematician" }, { "first_name" : "Annie", "last_name" : "Easley", "department" : "Software
Development", "job_title" : "Technical Lead", "start_date" : "06/02/2020", "employee_type" : "Rocket
Scientist" } ] }
```

#### Output of the Template

The [example](#template2) returns template-built output. The output is HTML with the dynamically
produced rows and data from the objects in the array.

```xml
<html>
  <body>
    <table>
      <thead>
        <tr>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Department</th>
          <th>Job Title</th>
          <th>Start Date</th>
          <th>Employee Type</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td><span>Melba</span></td>
          <td><span>Roy Mouton</span></td>
          <td><span>Computers</span></td>
          <td><span>Assistant Chief of Research Programs</span></td>
          <td><span>01/01/2021</span></td>
          <td><span>mathematician</span></td>
        </tr>
        <tr>
          <td><span>Annie</span></td>
          <td><span>Easley</span></td>
          <td><span>Software Development</span></td>
          <td><span>Technical Lead</span></td>
          <td><span>06/02/2020</span></td>
          <td><span>Rocket Scientist</span></td>
        </tr>
      </tbody>
    </table>
  </body>
</html>
```

## Special Characters

Parse Template supports the use of expressions within a template and the use of literals within
these expressions. The template recognizes certain special characters, such as the sequence `\#[`
and quotations marks. You can escape such characters to treat them as regular characters.

- `#[an-expression]`:

  Within a template, use the characters `#[]` to designate an expression. For example, a template
  can contain expressions within HTML elements, such as `<td>#[upper("mulesoft")]</td>`, which
  resolves to `<td>MULESOFT</td>`. Empty expressions (`#[]`) return an error, but empty strings,
  such as `#['']` or `#[""]` are valid expressions.

- Sub-expressions:

  To resolve a sub-expression that is surrounded by quotation marks, surround the sub-expression
  with another `#[]`. For example, the four elements in the template snippet below contain the same
  sub-expression (`upper("world")`), either inside or outside of quotation marks. The first two
  return the same results. The last two do not process `upper("world")` because the sub-expression
  is inside the quotation marks but not surrounded by another `#[]`.

  Parse Template Snippet:

  ```XML
  <td>#['hello #[upper("world")]']</td>
  <td>#['hello ' ++ upper("world")]</td>
  <td>#['hello upper("world")']</td>
  <td>#['hello ++ upper("world")']</td>
  ```

  Output Values:

  ```XML
  <td>hello WORLD</td>
  <td>hello WORLD</td>
  <td>hello upper("world")</td>
  <td>hello ++ upper("world")</td>
  ```

- Escape character (`\`):

  Parse Template uses the character sequence `#[` to identify where an expression begins. To avoid
  this behavior and treat that sequence as literal characters, escape it with `\`, for example,
  `<td>#[</td>` returns `<td>#[</td>`.

  In addition, expressions can contain strings with special characters that you want to treat as
  regular characters. To escape any special characters within a string that is embedded inside an
  expression, append `\` to the character. Examples of special characters include the sequence `#[`,
  quotations marks (`'` or `"`), apostrophes (`'`), and `$`. It is not necessary to escape `\#` or
  `[` unless they are adjacent to one another in the string, with the `\#` preceding the `[`.

  Parse Template Snippet:

  ```XML
  <td>\#[</td>
  <td>#['abcd\#[-1234' ++ now() as String ++ '.log']</td>
  <td>'abc'def'</td>
  <td>#['abc\'def']</td>
  <td>"xyz"xyz"</td>
  <td>#["xyz\"xyz"]</td>
  <td>#["abc\$DEF\#ghi\[JKL]"]</td>
  ```

  Output Values:

  ```XML
  <td>#[</td>
  <td>abcd#[-12342020-07-06T17:20:10.683-07:00.log</td>
  <td>'abc'def'</td>
  <td>abc'def</td>
  <td>"xyz"xyz"</td>
  <td>xyz"xyz</td>
  <td>abc$DEF#ghi[JKL]</td>
  ```

  For more information, see
  [Escape Special Characters](https://docs.mulesoft.com/dataweave/2.4/dataweave-language-introduction#escape-special-characters).
