BuildRowsetFromXml
Descrição
Carrega dados XML em um rowset, permitindo que você percorra e extraia informações estruturadas de um conteúdo XML diretamente no AMPscript. É extremamente útil quando você recebe dados de APIs externas via HTTPGet ou HTTPPost em formato XML e precisa renderizar essas informações em e-mails ou CloudPages. A função é executada no momento do envio para mensagens e no momento do carregamento para CloudPages.
Sintaxe
BuildRowsetFromXml(xmlData, xpathExpression, boolReturnEmptyOnError)
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| xmlData | string | Sim | Os dados XML que você quer parsear. |
| xpathExpression | string | Sim | A expressão XPath usada para localizar os nós desejados nos dados XML. |
| boolReturnEmptyOnError | boolean | Sim | Se false, retorna um rowset vazio quando há erro de sintaxe na função ou na expressão XPath. Se true, retorna uma exceção quando ocorre um erro. |
Exemplo básico
Extraindo uma lista de produtos de um XML para exibir em um e-mail promocional da MegaStore.
%%[
SET @xml = "<produtos><produto><nome>Notebook Gamer</nome><preco>R$ 5.499,90</preco></produto><produto><nome>Monitor 27pol</nome><preco>R$ 1.299,90</preco></produto><produto><nome>Teclado Mecânico</nome><preco>R$ 349,90</preco></produto></produtos>"
SET @rowset = BuildRowsetFromXml(@xml, "//produto", false)
FOR @i = 1 TO RowCount(@rowset) DO
SET @row = Row(@rowset, @i)
SET @nome = Field(@row, "nome")
SET @preco = Field(@row, "preco")
]%%
Produto: %%=V(@nome)=%% - %%=V(@preco)=%%
%%[ NEXT @i ]%%
Saída:
Produto: Notebook Gamer - R$ 5.499,90
Produto: Monitor 27pol - R$ 1.299,90
Produto: Teclado Mecânico - R$ 349,90
Exemplo avançado
Cenário real de régua de relacionamento: o Banco Brasilão retorna dados de transações recentes do cliente via API em XML. Você precisa montar uma tabela no e-mail com as últimas movimentações, incluindo atributos dos nós.
%%[
SET @xmlTransacoes = Concat( "<extrato conta='12345-6' agencia='0001'>", "<transacao tipo='debito'><descricao>Supermercados Bela Vista</descricao><valor>R$ 287,45</valor><data>15/06/2025</data></transacao>", "<transacao tipo='pix'><descricao>João Silva</descricao><valor>R$ 150,00</valor><data>14/06/2025</data></transacao>", "<transacao tipo='credito'><descricao>Salário - Grupo Horizonte</descricao><valor>R$ 8.500,00</valor><data>10/06/2025</data></transacao>", "</extrato>" )
SET @transacoes = BuildRowsetFromXml(@xmlTransacoes, "//transacao", false)
SET @totalTransacoes = RowCount(@transacoes)
IF @totalTransacoes > 0 THEN
]%%
<table>
<tr>
<th>Data</th>
<th>Descrição</th>
<th>Tipo</th>
<th>Valor</th>
</tr>
%%[
FOR @t = 1 TO @totalTransacoes DO
SET @linha = Row(@transacoes, @t)
SET @descricao = Field(@linha, "descricao")
SET @valor = Field(@linha, "valor")
SET @data = Field(@linha, "data")
SET @tipo = Field(@linha, "tipo")
]%%
<tr>
<td>%%=V(@data)=%%</td>
<td>%%=V(@descricao)=%%</td>
<td>%%=ProperCase(V(@tipo))=%%</td>
<td>%%=V(@valor)=%%</td>
</tr>
%%[
NEXT @t
]%%
</table>
%%[ ENDIF ]%%
Saída:
Data | Descrição | Tipo | Valor
15/06/2025 | Supermercados Bela Vista | Debito | R$ 287,45
14/06/2025 | João Silva | Pix | R$ 150,00
10/06/2025 | Salário - Grupo Horizonte | Credito | R$ 8.500,00
Observações
- O rowset retornado inclui automaticamente uma coluna para cada atributo encontrado em qualquer nó correspondente à expressão XPath. No exemplo avançado, o atributo
tipoda tag<transacao>é acessível via Field. Se um nó não tiver determinado atributo presente em outros nós, o rowset retorna um valor vazio para aquela coluna.
⚠️ Atenção: Os seguintes tipos de nós XML não retornam valor: CDATA, Comment, Document, Document Fragments, DocumentType, Entities, Entity References, Notation, ProcessingInformation, Whitespace e XmlDeclaration. Se seu XML depende fortemente de seções CDATA, por exemplo, os dados dentro delas não serão extraídos.
⚠️ Atenção: Preste atenção no parâmetro
boolReturnEmptyOnError. Usefalsese quiser que o e-mail seja enviado mesmo quando houver erro no XML (retorna rowset vazio) - ideal para envios em massa onde você não quer que um XML malformado quebre o envio inteiro. Usetrueapenas quando precisar identificar erros explicitamente, como em CloudPages de diagnóstico.
💡 Dica: Para percorrer o rowset retornado, combine com Row, RowCount e Field - esse é o trio padrão para trabalhar com qualquer rowset no AMPscript.
💡 Dica: Se os dados que você precisa parsear estão em formato JSON e não XML, use BuildRowsetFromJson. Para dados simples separados por delimitador, veja BuildRowsetFromString.
Funções relacionadas
- BuildRowsetFromString - cria rowset a partir de string com delimitador
- BuildRowsetFromJson - cria rowset a partir de dados JSON
- TransformXML - transforma XML usando XSLT
- Row - acessa uma linha específica do rowset
- RowCount - conta o número de linhas do rowset
- Field - extrai o valor de uma coluna de uma linha do rowset
- HTTPGet - obtém dados de uma URL externa (frequentemente XML)
- HTTPPost - envia dados e recebe resposta (frequentemente XML)