Я разбираю сотни poms с помощью скрипта bash в странной иерархии, чтобы извлечь обзор всех проектов в один отчет (что-то вроде того, что maven-info-projects:project-team может' сделать за один раз). По неизвестным причинам я не хочу связываться с родительским pom или пытаться настроить разделы maven-info-projects.
Я использую XMLStarlet, поскольку он установлен, и xmlint — нет.
Учитывая экстракт pom.xml, который содержит:
<developer>
<id>devId</id>
<name>Developer Name</name>
<email>[email protected]</email>
<roles>
<role>Project manager</role>
<role>Developer</role>
</roles>
</developer>
Как извлечь всю информацию о разработчике, включая несколько ролей, одним вызовом XMLStarlet?
На данный момент я могу извлечь большую часть своей информации с помощью:
# 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 объединить несколько ролей, например, в список, разделенный запятыми?