edit-xml
Nesta seção, você encontra: Referência de um Hook Declarativo do tipo edit-xml.
Um Hook Declarativo do tipo edit-xml
define alterações feitas em arquivos XML existentes. Confira um exemplo de definição de um Hook Declarativo do tipo edit-xml
:
schema-version: v3
kind: plugin
metadata:
name: sqs-consumer-plugin
display-name: sqs-consumer-plugin
description: Plugin configuring Spring Cloud AWS for SQS consumption.
version: 0.0.1
spec:
type: app
compatibility:
- kotlin
- spring
docs:
pt-br: docs/pt-br/docs.md
en-us: docs/en-us/docs.md
technologies: # Ref: https://docs.stackspot.com/create-use/create-content/yaml-files/plugin-yaml/#technologies
- AWS SQS
- Kotlin
- Maven
- Springboot
inputs:
- label: Select the connection for your sqs-conn
name: sqs-conn
type: required-connection
connection-interface-type: aws-sqs-conn
- label: input tag
name: input_tag
type: text
- label: input body
name: input_body
type: text
// highlight-start
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
// highlight-end
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) caractere(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
.
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:
Confira as expressões detalhadas
Expressão | Descriçã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}}>
Os atributos a seguir são opcionais, é necessário implementar 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']