> ## Documentation Index
> Fetch the complete documentation index at: https://docs.alumio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Transform matching nodes

> Applies data transformers to nodes within each entity that match the configured accessor.

export const FormField = ({property, label, required = false, diType, uiPatterns, children}) => {
  const patterns = Array.isArray(uiPatterns) ? uiPatterns : uiPatterns ? [uiPatterns] : [];
  return <div style={{
    margin: '1.5rem 0'
  }}>
      <div style={{
    display: 'flex',
    alignItems: 'baseline',
    flexWrap: 'wrap',
    gap: '0.5rem',
    marginBottom: '0.25rem'
  }}>
        <strong>{label}</strong>
        <span style={{
    fontSize: '0.7rem',
    fontWeight: 600,
    textTransform: 'uppercase',
    letterSpacing: '0.04em',
    color: required ? '#6241f5' : '#6b7280'
  }}>
          {required ? 'Required' : 'Optional'}
        </span>
      </div>

      <div>{children}</div>

      {diType || patterns.length > 0 ? <p style={{
    fontSize: '0.85rem',
    color: '#6b7280',
    marginBottom: 0
  }}>
          {diType ? <>
              See the <a href={`/references/${diType}`}>{diType}</a> reference.{' '}
            </> : null}
          {patterns.length > 0 ? <>
              Accepts a <a href={`/documentation/placeholders-and-patterns/patterns#${patterns[0]}`}>pattern</a>.
            </> : null}
        </p> : null}
    </div>;
};

Applies data transformers to nodes within each entity that match the configured accessor. Use this step to reach into a repeating part of an item, such as the lines on an order or the addresses on a customer, and transform each matching part in place without touching the rest of the item. You choose how to find the nodes, optionally narrow them down with conditions, and then apply data transformers to just those nodes.

This documentation describes: [Schema](/schemas/transformer-step/node)

## Fields

<FormField property="accessor" label="Accessor" required diType="accessor">
  How the matching nodes are found inside each item. You pick a way of reading values here, and the data transformers below are applied to every node it points at. See [accessors](/references/accessor) for how to select one.
</FormField>

<FormField property="nodeFilters" label="Node filters" diType="filter">
  Optional conditions that narrow down which matched nodes are transformed. A node must match every filter to qualify; nodes that do not match are left unchanged. Leave it empty to transform every node the accessor finds.
</FormField>

<FormField property="nodeTransformers" label="Data transformers" diType="transformer">
  The data transformers applied to each matching node, in the order you list them. They run on the node itself rather than the whole item, so the rest of the item stays as it was.
</FormField>

## Sample data

This step transforms parts of the items passing through a route, so it runs as part of a route rather than on its own. A configuration that applies a data transformer to every order line found by an accessor looks like this:

| Field             | Value                                   |
| ----------------- | --------------------------------------- |
| Accessor          | An accessor pointing at the order lines |
| Node filters      | (none)                                  |
| Data transformers | One data transformer that sets a value  |

With this configuration, each item's order lines are located by the accessor and the listed data transformer is applied to every line, while the rest of the item is left untouched.

```json Configuration theme={null}
{
  "prototype": "node",
  "parameters": {
    "accessor": {
      "prototype": "children",
      "parameters": { "pattern": "lines.*" }
    },
    "nodeFilters": [],
    "nodeTransformers": [
      {
        "prototype": "value-setter",
        "parameters": {
          "configurations": [
            { "key": "processed", "value": true }
          ]
        }
      }
    ]
  }
}
```
