Content Script Converter

image-20260630-151859.png

The Content Snippet Converter is an AI-powered application built on top of the Zeta App Framework that helps implementation and migration teams convert legacy ESP scripting into Zeta Markup Language (ZML) and Liquid syntax. It supports XSLT/XML conversion for Cheetah Digital migrations and is expanding to include AMPscript conversion for Salesforce Marketing Cloud migrations, making it a more generalized migration app rather than a single-purpose conversion tool.

This application addresses a common migration bottleneck: legacy email templates often contain embedded scripting logic that does not map directly to ZML. Rewriting that logic manually is slow, repetitive, and error-prone. The app provides a guided, AI-assisted workspace to accelerate this process while still allowing human review and refinement.

How the Application Works

The app uses a two-pane conversion workflow. Users select the source scripting language, such as XSLT/XML or AMPscript, provide the legacy source code on the left, then generate ZML/Liquid output on the right. The converted code is editable, which allows users to refine logic, naming, and formatting after the initial AI-assisted translation.

Capability

Description

Split-pane editor

Side-by-side source and output panes for faster review and comparison

Editable source and output

Both panes support manual adjustment, which is useful when the user wants to clean source code or refine translated ZML

Syntax-aware experience

Input supports legacy source formats such as XSLT/XML and AMPscript, while output uses Liquid/ZML syntax highlighting and standard code editor features

Copy actions

Each pane has a dedicated copy action for quickly moving code into other workflows

Saved translations

Users can save translations with a required name and an optional description

If you do not see the Content Script Converter app, please reach out to your Zeta support or account team for access assistance.

The Content Script Converter app is accessible from the Applications menu in ZMP.

2026-07-01_22-47-01 (1)-20260701-214800.gif
  • When you open the app, you land on the Conversions List page.

2026-07-01_22-50-37 (1)-20260701-215119.gif
  • Click New Conversion and select the input language.

2026-07-01_22-51-46 (1)-20260701-215201.gif
  • Enter your source script. You can also provide an optional sample payload to help validate the conversion.

Currently, you can convert XSLT and AMPscript. Support for additional scripting languages will be added in future releases.

2026-07-01_22-55-08 (1)-20260701-215604.gif
2026-07-01_23-04-23 (2)-20260701-220459.gif
  • Review the confidence score and any warnings, assumptions, or unconverted constructs.

  • Edit source or output as needed.

  • Copy the translated output or save the translation for reuse.


Key features

Conversion Workspace

The core user experience centers on a code input/output editor. The design direction calls for a split-screen layout, loading states during conversion, line numbers, and copy-to-clipboard actions. The app is intended to feel familiar to users who work directly in code and templates.

Confidence Scoring and Review Guidance

After conversion, the app presents a confidence score to help users understand how much review is likely needed. This score is paired with a structured summary rather than a single number alone.

  • High confidence: compact summary with score, translated unit count, logic summary, and assumptions if relevant

  • Below high confidence: expandable detail view separating review-required items, auto-converted items, and assumptions

  • Warnings: non-blocking alerts for unsupported or partially converted XSLT constructs

Confidence score interpretation
The score is intended as review guidance, not a guarantee that the translated script is production-ready without validation. Users should still confirm field mappings, conditional logic, loop behavior, and deployment context.

Save Named Translation

Users can save converted output with a name and optional description so it can be reopened later. If saved translations already exist, the app can open in a list view where users can create a new translation or continue work on an existing one.

Feedback Collection

A planned enhancement captures thumbs up/down feedback and optional comments after conversion, so the translation approach can improve over time. Feedback is intended to be non-blocking and tied to conversion context.


Supported Translation Patterns

The source material defines several starter translation rules and examples used to guide the conversion behavior. These patterns help map common XSLT constructs into equivalent Liquid or ZML concepts.

XSLT / XPath pattern

ZML / Liquid pattern

xsl:for-each

{% for item in collection %}...{% endfor %}

xsl:if

{% if condition %}...{% endif %}

xsl:choose, xsl:when, xsl:otherwise

{% if %}, {% elsif %}, {% else %}

xsl:value-of

{{ variable }}

xsl:variable

{% assign var = value %}

xsl:call-template

{% snippet name: "template_name" %}

AMPscript Conversion

AMPscript support broadens the app beyond Cheetah-specific XSLT conversion. For Salesforce Marketing Cloud migrations, users can convert AMPscript-based templates into ZML/Liquid while preserving the intent of personalization, conditional logic, row iteration, and surrounding HTML/CSS where possible.

AMPscript / SFMC pattern

ZML / Liquid pattern

%%=FieldName=%%

{{ field_name }} or mapped ZMP event/profile property

IF / ELSEIF / ELSE

{% if %}, {% elsif %}, {% else %}

FOR loops and row iteration

{% for item in collection %}...{% endfor %}

SET variable assignments

{% assign var = value %}

AMPscript functions such as string, date, and formatting helpers

Equivalent Liquid filters or review notes where a direct mapping is not available

Starter guidance also includes common data model mapping patterns such as:

  • Property lookups mapped to properties, person, or event.properties paths in ZMP

  • Array-style order structures mapped to event collections

  • Nested item references mapped to order item loops

  • XPath-style function logic mapped to Liquid filters and operators where possible

Examples of starter mapping guidance

Data model mapping

  • /Msg/Props/Prop[@prop_name='field_name']/@val{{ properties.field_name }}, {{ person.field_name }}, or {{ event.properties.field_name }}

  • ctxorder_to_ctxs/ctxorder_to_ctx → event order collection patterns

  • Nested order item structures → item loops within order context

Function and condition mapping

  • concat() → combined Liquid output

  • format-number() → formatting filter pattern

  • substring() → truncation-style filter pattern

  • Empty string checks → Liquid truthy checks where appropriate

  • Alternating row logic using position()forloop.index0-based checks


Best Practices

Even when a conversion score is high, reviewers should validate a few critical areas before reuse in production. This applies to both XSLT/XML and AMPscript conversions.

  • Field mapping: confirm that source XPath references map to the correct ZMP data paths

  • Loop structure: verify that nested collections and iteration variables preserve the original intent

  • Conditional logic: check for truthy/empty handling differences between XSLT and Liquid

  • Formatting behavior: confirm date, currency, number, and string formatting output

  • Rendered HTML: ensure attributes, mixed text, and dynamic content render correctly

Complex legacy templates may include scaffolding, unsupported functions, or environment-specific assumptions. If output quality is low or warnings are present, manual review is required before the snippet is used in campaigns.