Tenho um arquivo de configurações do Maven em ~/.m2/settings.xml. Preciso escrever algum script que extraia o nome de usuário e a senha de uma das entradas do servidor.
Eu tentei usar "xmllint" e "xmlstarlet" usando o que acredito serem os parâmetros de linha de comando corretos (diferentes) para ambos. O resultado para ambos é apenas uma string vazia. Não há erro, ele apenas não imprime nada.
Este é um trecho de ~/.m2/settings.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
...
--><!--
| This is the configuration file for Maven. It can be specified at two levels:
...
|-->
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>central</id>
<username>...</username>
<password>...</password>
</server>
...
Isso está funcionando bem com o Maven.
Para xmllint, estou tentando o seguinte:
xmllint --xpath 'string(//server[id="central"]/username/text())' ~/.m2/settings.xml
Para xmlstarlet, é isto:
xmlstarlet sel -T -R -D -t -v "//settings/servers/server[id='central']/username/text()" ~/.m2/settings.xml
Elas são ligeiramente semanticamente diferentes, mas eu tentei várias variações. Todas elas apenas imprimem uma string vazia.
O documento usa namespaces XML, você precisa especificá-los. A abordagem mais simples é usar o placeholder
xmlstarlet
do_
para o namespace padrão: