奇妙な階層のbashスクリプトを使用して数百のpomを解析し、すべてのプロジェクトの概要を1つのレポートに抽出しています(maven-info-projects:project-teamでは一度に実行できないようなものです)。公開されていない理由で、親pomをいじったり、maven-info-projectsセクションを構成したりしたくありません。
XMLStarletがインストールされているのに使用していますが、 xmllintはインストールされていません。
以下を含むpom.xml抽出が与えられます:
<developer>
<id>devId</id>
<name>Developer Name</name>
<email>dev@nowhere.com</email>
<roles>
<role>Project manager</role>
<role>Developer</role>
</roles>
</developer>
XMLStarletを1回呼び出すだけで、複数のロールを含むすべての開発者情報を抽出するにはどうすればよいですか?
現時点では、次の方法で情報の大部分を抽出できます。
# Developers
locate_section_values $pom_file_name "/x:project/x:developers/x:developer" \
"concat( \
x:id, '|', x:name, '|', x:email, '|', x:roles, '|', \
x:organization, '|', x:organizationUrl, '|', x:timezone
)"
どこ
function locate_section_values(){
local xml_file=$1
local section=$2
local value_table=$3
OLD_IFS=$IFS
IFS=$'\n'
xml_values=()
xml_values=(`xmlstarlet sel -B -N x="http://maven.apache.org/POM/4.0.0" -t -m "$section" -v "$value_table" -nl $xml_file`)
IFS=$OLD_IFS
}
次に、結果を分割します。
for developer in ${xml_values[@]}; do
IFS='|'
set $developer # split into $1, $2, etc using | as seperator
#echo "id:${1}, name:${2}, roles:${4}"
if [ -n "${1}" ]; then # id
developer_id=${1}
developer_ids+=( $developer_id )
fi
...
問題は、複数の役割を持つ開発者が役割を連結することです。
Project managerDeveloper
xmlstarletの元の呼び出しに、複数の役割を組み合わせて、たとえばコンマ区切りのリストにする方法はありますか?