edit-xml

Nesta seção, você encontra a referência de um Hook Declarativo do tipo edit-xml.

O Hook Declarativo edit-xml define as alterações que serão feitas em arquivos XML existentes.

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"

  • namespaces: É uma lista com os correspondentes namespace do XML, onde o atributo name é utilizado posteriormente para a busca no xpath. Seu uso é obrigatório somente para executar buscas onde o XML contém namespace.

    • name: Nome correspondente ao namespace do XML.
    • value: O valor editado no namespace do XML.
    namespaces:
      - name: ns0                    # alias 
        value: http://stackspot.org  # url
    ...
    changes:
      - xpath: //ns0:configuration   # usando alias ns0
    

Exemplo de um Hook Declarativo com a opção namespaces

  - type: edit-xml 
    trigger: after-render 
    path: pom.xml 
    encoding: UTF-8 
    indent: "\t" 
    namespaces:
      - name: ns
        value: http://maven.apache.org/POM/4.0.0

  • changes: É uma lista de ações de edição que serão executadas na ordem em que aparecem. E o seu bloco tem como obrigatório o parametro xpath.
  changes:
    - xpath: /people/person[last()]
      ...
  • xpath: Permite inserir a linguagem de busca de XML. Seu uso é Obrigatório.
- xpath: //ns:project.build.sourceEncoding
  1. clear: Remove todo o conteúdo do nó dado o contexto do xpath.
  - xpath: //ns:dependency
    clear: true
  1. remove-attributes: 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
  1. append: 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
  1. prepend: 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
  1. next: 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
  1. previous: 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
  1. text: 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
  1. attributes: 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"

Exemplo de um Hook Declarativo edit-xml com todas as opções disponíveis em changes

  - type: edit-xml 
    trigger: after-render 
    path: pom.xml 
    encoding: UTF-8 
    indent: "\t" 
    namespaces:
      - name: ns
        value: http://maven.apache.org/POM/4.0.0
    changes:
      - xpath: //ns:comments
        clear: true

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

      - xpath: //ns:dependency
        append:
          value: |
            <config>
              <vsync>1</vsync>
            </config>            

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

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

        previous:
          snippet: snippets/fragment.xml

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

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

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

Leia também