Pular para o conteúdo principal
Version: v4.5.0

edit-xml


Um Hook Declarativo do tipo edit-xml define alterações feitas em arquivos XML existentes. Confira abaixo um exemplo de definição de um Hook Declarativo do tipo edit-xml:

hooks:
- type: edit-xml
trigger: after-render
path: pom.xml
encoding: UTF-8
indent: "\t"
changes:
- xpath: .//dependency
append:
value: |
<config>
<vsync>1</vsync>
</config>
prepend:
value: <{{input_tag}}>{{input_body}}</{{input_tag}}>

- xpath: .//modelVersion
text:
value: 10.0.1

- xpath: .//description
text:
snippet: snippets/description.txt

- xpath: .//dependencies
remove-attributes:
- name: css

- xpath: .//project.build.sourceEncoding
attributes:
- name: btn-name
value: Build UTF-8

- xpath: .//comments
clear: true

- xpath: ./dependencies/dependency/artifactId[.='spring-boot-starter-web']/..
remove: true

Ações Disponíveis

path:

Define o caminho do arquivo que será editado. O caminho pode ser composto por expressões Jinja.

path: "./some/dir_xml/{{file_name}}"

trigger:

Campo para definir gatilhos que informam o momento em que a edição de arquivos deve ocorrer.

before-input:
Executa o Hook Declarativo antes de receber os parâmetros de entrada da pessoa usuária.

trigger: before-input

before-render:
Executa o Hook Declarativo antes do Template gerar arquivos no projeto.

trigger: before-render

after-render:
Executa o Hook Declarativo após o Template gerar arquivos no projeto.

trigger: after-render

enconding:

Define o tipo de encoding que será gravado no arquivo, e aceita os formatos comuns ao XML tal como [utf-8, ascii, windows-1252], caso não seja informado, será mantido o padrão original do arquivo. Seu uso é Opcional.

encoding: UTF-8

indent:

Define o(s) caracterer(s) para a indentação do documento gerado, o valor padrão é \t. Seu uso é Opcional.

indent: "\t"

changes:

É uma lista de ações de edição que são executadas na ordem em que aparecem. E o seu bloco tem como obrigatório o parâmetro xpath.

info

Durante o processo de pesquisa no atributo changes, todos os nós que correspondem aos critérios (atributo xpath) são alterados de uma só vez. Você pode fazer várias alterações em um arquivo apenas usando expressões.

Confira algumas expressões aceitas:

Clique aqui para expandir!
ExpressãoDescrição
Ponto (.)Define o objeto do elemento atual.
/Define o objeto do elemento raiz.
()Define o agrupamento em xpath.
[]Aplica o filtro à expressão do script.
/Este é um operador filho que foi usado em expressões.
..Este é o operador pai que foi usado em expressões.
//Esta é uma descida recursiva.
*É usado em elementos de objeto independentemente de usar seus nomes.
@É usado para acessar o atributo.
[]É o operador do subscrito Xpath que usa esse operador para iterar uma coleção de predicados de elementos.
\|É um operador de união nos resultados do xpath que é uma combinação de conjuntos de nós.

Para conhecer todas as expressões disponíveis, acesse a documentação do Xpath.

changes:
- xpath: /people/person[last()]
...

xpath:

Permite inserir a linguagem de busca de XML. Seu uso é Obrigatório.

- xpath: //ns:project.build.sourceEncoding

É possível interpolar os valores do campo xpath com Jinja:

hooks:
- type: edit-xml
trigger: after-render
path: pom.xml
encoding: UTF-8
indent: "\t"
changes:
- xpath: ".//{{INTERPOLAR-INPUT-AQUI}}"
append:
value: |
<config>
<vsync>1</vsync>
</config>
prepend:
value: <{{input_tag}}>{{input_body}}</{{input_tag}}>
caution

Os atributos a seguir são opcionais, é necessário implemetar ao menos uma opção, em caso de múltiplos atributos, eles serão aplicados na seguinte ordem:

clear:(Opcional)

Remove todo o conteúdo do nó dado o contexto do xpath.

  - xpath: //ns:dependency
clear: true

remove-attributes:(Opcional)

Remove os atributos de um nó. Os campos disponíveis são um ou mais name.

  - xpath: //ns:dependency
remove-attributes:
- name: css
- name: style
- name: data

append:(Opcional)

Adiciona nós XML dentro do contexto do resultado do xpath no fim da lista. Os campos disponíveis são value ou snippet.

value
Recebe o valor para ser adicionado ao XML.

append:
value: |
<config>
<vsync>1</vsync>
</config>

snippet
Recebe o snippet para ser adicionado ao XML.

append:
snippet: snippets/fragment.xml

prepend:(Opcional)

Adiciona nós XML dentro do contexto do resultado do xpath no início da lista. Os campos disponíveis são value ou snippet.

value
Recebe o valor para ser adicionado ao XML.

append:
value: <{{input_tag}}>{{input_body}}</{{input_tag}}>

snippet
Recebe o snippet para ser adicionado ao XML.

append:
snippet: snippets/fragment.xml

next:(Opcional)

Adiciona nós XML no mesmo nível de contexto do resultado do xpath no fim da lista. Os campos disponíveis são value ou snippet.

value
Recebe o valor para ser adicionado ao XML.

append:
value: |
<dependency>
<groupId>com.stackspot.lib</groupId>
<artifactId>some-lib</artifactId>
<version>1.0.0</version>
</dependency>

snippet
Recebe o snippet para ser adicionado ao XML.

append:
snippet: snippets/fragment.xml

previous:(Opcional)

Adiciona nós XML no mesmo nível de contexto do resultado do xpath no início da lista. Os campos disponíveis são value ou snippet.

value
Recebe o valor para ser adicionado ao XML.

append:
value: |
<dependency>
<groupId>com.stackspot.lib</groupId>
<artifactId>some-lib</artifactId>
<version>1.0.0</version>
</dependency>

snippet
Recebe o snippet para ser adicionado ao XML.

append:
snippet: snippets/fragment.xml

text:(Opcional)

Adiciona texto dentro do contexto do resultado do xpath. Os campos disponíveis são value ou snippet.

value
Recebe o valor para ser adicionado ao XML.

append:
value: version-10.0.1

snippet
Recebe o snippet para ser adicionado ao XML.

append:
snippet: snippets/description.txt

attributes:(Opcional)

Adiciona atributos e valores a um nó. Os campos disponíveis são name e value.

name
Recebe o valor para ser adicionado ao XML.

value
Recebe o snippet para ser adicionado ao XML.

- xpath: //ns:button
attributes:
- name: btn-name
value: Build UTF-8
- name: style
value: "color: #007"

remove:

Opção para remover um nó do arquivo XML. Use o valor true para remover o nó do arquivo XML.

hooks:
- type: edit-xml
trigger: after-render
path: pom-remove.xml
changes:
- xpath: ./dependencies/dependency/artifactId[.='spring-boot-starter-web']/..
remove: true

when:

Ação condicional que avalia se a inserção será efetivada. A opção disponível é not-exists, que recebe o texto ou arquivo para serem avaliados pela condição.

not-exists:
Checa se os valores informados nos campo value existem no arquivo. Caso exista, as ações clear, remove-attributes, append, prepend, next, previous, text e attributes não serão efetivadas.

hooks:
- xpath: ./dependencies
append:
value: |
<dependency>
<groupId>com.stackspot</groupId>
<artifactId>test</artifactId>
<version>1.0.0</version>
</dependency>
when:
not-exists: ./dependencies/dependency/groupId[.='com.stackspot']/../artifactId[.='test']

Leia também

Esta página foi útil?