Relacionado: Como posso imprimir JSON em shell script (unix)?
Existe um shell script (unix) para formatar XML em formato legível por humanos?
Basicamente, quero transformar o seguinte:
<root><foo a="b">lorem</foo><bar value="ipsum" /></root>
... em algo assim:
<root>
<foo a="b">lorem</foo>
<bar value="ipsum" />
</root>
xml
unix
command-line
svidgen
fonte
fonte
xmllint
disponível nos sistemas Debian, você precisa instalar o pacotelibxml2-utils
(libxml2
não fornece esta ferramenta, pelo menos não no Debian 5.0 "Lenny" e 6.0 "Squeeze").Respostas:
libxml2-utils
Este utilitário vem com
libxml2-utils
:Perl's
XML::Twig
Este comando vem com XML :: Twig perlmódulo, às vezes
xml-twig-tools
empacota:xmlstarlet
Este comando vem com
xmlstarlet
:tidy
Verifique o
tidy
pacote:Pitão
O Python
xml.dom.minidom
pode formatar XML (python2 e python3):saxon-lint
Você precisa de
saxon-lint
:saxon-HE
Você precisa de
saxon-HE
:fonte
echo '<xml .. />' | xmllint --some-read-from-stdn-option
,?libxml2-utils
no meu lindo ubuntu.UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 805: ordinal not in range(128)
na versão python, você deseja definirPYTHONIOENCODING="UTF-8"
:cat some.xml | PYTHONIOENCODING="UTF-8" python -c 'import sys;import xml.dom.minidom;s=sys.stdin.read();print xml.dom.minidom.parseString(s).toprettyxml()' > pretty.xml
echo '<x></x><y></y>' | tidy -xml -iq
xmllint --format yourxmlfile.xml
xmllint é uma ferramenta XML de linha de comando e está incluída em
libxml2
( http://xmlsoft.org/ ).==================================================
Nota: Se você não tiver
libxml2
instalado, poderá instalá-lo fazendo o seguinte:CentOS
Ubuntu
sudo apt-get install libxml2-utils
Cygwin
apt-cyg install libxml2
Mac OS
Para instalar isso no MacOS com o Homebrew, basta:
brew install libxml2
Git
Também disponível no Git se você deseja o código:
git clone git://git.gnome.org/libxml2
fonte
sudo apt-get install libxml2-utils
git
para Windows, o download instala até uma versão recente doxmllint
. Exemplo:"C:\Program Files\Git\usr\bin\xmllint.exe" --format [email protected] > [email protected]
Você também pode usar o arrumado , que pode precisar ser instalado primeiro (por exemplo, no Ubuntu: sudo
apt-get install tidy
).Para isso, você emitirá algo como o seguinte:
Nota: possui muitos sinalizadores de legibilidade adicionais, mas o comportamento de quebra de linha é um pouco irritante para desemaranhar ( http://tidy.sourceforge.net/docs/quickref.html ).
fonte
tidy
funciona bem para mim também. Ao contráriohxnormalize
, isso feito na verdade fecha a<body>
etiqueta.tidy --indent yes --indent-spaces 4 --indent-attributes yes --wrap-attributes yes --input-xml yes --output-xml yes < InFile.xml > OutFile.xml
.alias prettyxml='tidy --indent yes --indent-spaces 4 --indent-attributes yes --wrap-attributes yes --input-xml yes --output-xml yes | pygmentize -l xml'
e, em seguida, podecurl url | prettyxml
Você não mencionou um arquivo, portanto, suponho que você queira fornecer a sequência XML como entrada padrão na linha de comando. Nesse caso, faça o seguinte:
fonte
Sem instalar nada no macOS / na maioria dos Unix.
Usar
tidy
cat filename.xml | tidy -xml -iq
Redirecionar a visualização de um arquivo com cat para organizar a especificação do tipo de arquivo xml e recuar enquanto a saída silenciosa suprimirá a saída de erro. JSON também trabalha com
-json
.fonte
cat
passo:tidy -xml -iq filename.xml
. Além disso, você podetidy -xml -iq filename.xml
usar a-m
opção de modificar o arquivo original ...Formatação de suporte xmllint no local :
Como Daniel Veillard escreveu:
O nível de recuo é controlado pela
XMLLINT_INDENT
variável de ambiente, que é, por padrão, 2 espaços. Exemplo de como mudar o recuo para 4 espaços:Você pode ter falta de
--recover
opção quando seus documentos XML estão quebrados. Ou tente um analisador HTML fraco com saída XML estrita:--nsclean
,--nonet
,--nocdata
,--noblanks
Etc., podem ser úteis. Leia a página do manual.fonte
Levei uma eternidade para encontrar algo que funcione no meu mac. Aqui está o que funcionou para mim:
fonte
Eu gostaria de adicionar uma solução Bash pura, pois não é "difícil" fazê-lo manualmente, e às vezes você não deseja instalar uma ferramenta extra para fazer o trabalho.
Cole-o em um arquivo de script e insira o xml. Isso pressupõe que o xml esteja em uma única linha e que não haja espaços extras em nenhum lugar. Pode-se facilmente adicionar alguns extras
\s*
às expressões regulares para corrigir isso.fonte