Ao executar scripts de shell, normalmente os dados estarão em arquivos de registros de linha única como o csv. É realmente simples manipular esses dados com grep
e sed
. Mas eu tenho que lidar com XML frequentemente, então eu realmente gostaria de uma maneira de criar um script de acesso a esses dados XML através da linha de comando. Quais são as melhores ferramentas?
xml
command-line
scripting
Joseph Holsten
fonte
fonte
Respostas:
Eu achei o xmlstarlet muito bom nesse tipo de coisa.
http://xmlstar.sourceforge.net/
Também deve estar disponível na maioria dos repositórios de distribuição. Um tutorial introdutório está aqui:
http://www.ibm.com/developerworks/library/x-starlet.html
fonte
Algumas ferramentas promissoras:
nokogiri : analisando DOMs HTML / XML em ruby usando seletores XPath e CSS
hpricot : descontinuado
fxgrep : Usa sua própria sintaxe semelhante ao XPath para consultar documentos. Escrito em SML, a instalação pode ser difícil.
LT XML : kit de ferramentas XML derivada de ferramentas SGML, incluindo
sggrep
,sgsort
,xmlnorm
e outros. Usa sua própria sintaxe de consulta. A documentação é muito formal. Escrito em C. O LT XML 2 alega suporte ao XPath, XInclude e outros padrões W3C.xmlgrep2 : pesquisa simples e poderosa com o XPath. Escrito em Perl usando XML :: LibXML e libxml2.
XQSharp : Suporta XQuery, a extensão para XPath. Escrito para o .NET Framework.
xml-coreutils : kit de ferramentas do Laird Breyer equivalente ao GNU coreutils. Discutido em um ensaio interessante sobre o que o kit de ferramentas ideal deve incluir.
xmldiff : ferramenta simples para comparar dois arquivos xml.
xmltk : parece não ter pacote no debian, ubuntu, fedora ou macports, não é lançado desde 2007 e usa automação de compilação não portátil.
O xml-coreutils parece o melhor documentado e o mais orientado para UNIX.
fonte
À excelente lista de Joseph Holsten, adiciono o script de linha de comando xpath que acompanha a biblioteca Perl XML :: XPath. Uma ótima maneira de extrair informações de arquivos XML:
fonte
-q -e
opções. Exemplo, obtenha o valor do "pacote" do atributo no nó "manifesto" em "AndroidManifest.xml":xpath AndroidManifest.xml 'string(/manifest/@package)' 2> /dev/null
Há também
xml2
e2xml
par. Isso permitirá que as ferramentas comuns de edição de cadeias processem XML.Exemplo. q.xml:
xml2 < q.xml
xml2 < q.xml | grep textnode | sed 's!/foo!/bar/baz!' | 2xml
PS Há também
html2
/2html
.fonte
2xml
pode recriar facilmente XML a partir dexml2
saída parcial (filtrada) .cat foo.xml | xml2 | grep /bar | 2xml
- fornece a mesma estrutura que o original, mas todos os elementos foram removidos, exceto os elementos "bar". Impressionante.Você pode usar xmllint:
Deve ser fornecido com a maioria das distribuições e também com o Cygwin.
Vejo:
fonte
--xpath
argumento paraxmllint
: manpagez.com/man/1/xmllint--xpath
é uma adição relativamente recente e, por exemplo, não nas versões RHEL 6 doxmllint
.xmllint --xpath
foi introduzido no libxml2 2.7.7 (em 2010).Se você está procurando uma solução no Windows, o Powershell possui uma funcionalidade integrada para ler e escrever XML.
test.xml:
Script do PowerShell:
testNew.xml:
Fonte: /server/26976/update-xml-from-the-command-line-windows
fonte
xps $doc .root.one
xps $doc 'AppendChild("three")'
exps $doc '.three.set_InnerText("And don't you forget it!")'
, o que é claramente inferior!Também há xmlsed e xmlgrep dos xmltools do NetBSD!
http://blog.huoc.org/xmltools-not-dead.html
fonte
Depende exatamente do que você deseja fazer.
O XSLT pode ser o caminho a seguir, mas há uma curva de aprendizado. Tente xsltproc e observe que você pode entregar parâmetros.
fonte
Também existe na
saxon-lint
linha de comando a capacidade de usar o XPath 3.0 / XQuery 3.0. (Outras ferramentas de linha de comando usam o XPath 1.0).EXEMPLOS :
http / html:
xml:
fonte
D. Bohdan mantém um repositório de código-fonte aberto do GitHub que mantém uma lista de ferramentas de linha de comando para ferramentas de texto estruturado; há uma seção para ferramentas XML / HTML:
https://github.com/dbohdan/structured-text-tools#xml-html
fonte
XQuery pode ser uma boa solução. É (relativamente) fácil de aprender e é um padrão W3C.
Eu recomendaria o XQSharp para um processador de linha de comando.
fonte
Eu usei o xmlstarlet pela primeira vez e ainda o uso. Quando a consulta fica difícil, preciso do suporte aos recursos xpath2 e xquery do XML. Volto- me para xidel http://www.videlibri.de/xidel.html
fonte
Equivalente Grep
Você pode definir uma função bash, digamos "xp" ("xpath") que envolve algum código python3. Para usá-lo, você precisa instalar python3 e python-lxml. Benefícios:
É fácil e poderoso de usar assim:
xp () se parece com isso:
Sed Equivalent
Considere o uso do xq, que fornece todo o poder da "linguagem de programação" jq. Se você possui o python-pip instalado, pode instalar o xq com o pip install yq ; no exemplo abaixo, estamos substituindo "Manter contas" por "Manter contas 2":
fonte
O JEdit possui um plugin chamado "XQuery", que fornece funcionalidade de consulta para documentos XML.
Não é bem a linha de comando, mas funciona!
fonte
grep(1)
.