Existe um comando UNIX que pode substituir um elemento XML? (Como um sed para um XPath?)

Existe um comando UNIX que pode substituir um elemento XML? (Como um sed para um XPath?)

Existe um programa compatível com tubos que leva:

  • Um documento XML
  • Uma expressão XPath indicando o(s) elemento(s) de destino
  • A substituição desejada

? Algo parecido sed, mas com conhecimento sobre XML (elementos, espaços em branco, etc.)?

Responder1

XMLStarlet pode editar XML e fica feliz em viver em um cano.

xmlstarlet edit \
    -N "b=http://www.springframework.org/schema/beans" \
    -u '/b:beans/b:bean[@id="stun1"]/b:constructor-arg/@value' \
    -v "stun.example.com \
    -L servers.xml

cat servers.xml | xmlstarlet edit -u <xpath> -v <value>

XMLStarlet é um conjunto de utilitários de linha de comando (kit de ferramentas) para consultar, transformar, validar e editar documentos e arquivos XML usando um conjunto simples de comandos shell de maneira semelhante a como é feito com UNIX grep, sed, awk, diff, comandos patch, join, etc.

XMLStarlet é um software livre de código aberto lançado sob umaLicença MITque permite o uso e distribuição gratuitos para fins comerciais e não comerciais

https://xmlstar.sourceforge.net/

https://en.m.wikipedia.org/wiki/XMLStarlet

Responder2

Se você não se importa em usar/aprender XSLT, existe oxsltprocutilitário que pode fazer isso.

Responder3

XMLSH tem um comandofixoque pode se adequar aos seus parâmetros.

fixoavalia uma expressão xpath e edita cada nó correspondente gerando o documento resultante

informação relacionada