У меня есть файл XML: config.xml со следующими тегами в нем:Как проверить XML-теги с помощью xmlstarlet?
<roleMap type="globalRoles">
<role name="ABC Employee" pattern=".*">
<assignedSIDs>
<sid>abc</sid>
<sid>cde</sid>
<sid>efg</sid>
</assignedSIDs>
</role>
</roleMap>
<roleMap type="projectRoles">
<role name="Proj1" pattern="Proj1.*">
<permissions/>
<assignedSIDs>
<sid>abc</sid>
<sid>jkl</sid>
</assignedSIDs>
</role>
<role name="Proj2" pattern="Proj2.*">
<permissions/>
<assignedSIDs>
<sid>hij</sid>
<sid>cde</sid>
</assignedSIDs>
</role>
<role name="Proj3" pattern="Proj3.*">
<permissions/>
<assignedSIDs>
<sid>zxc</sid>
<sid>efg</sid>
</assignedSIDs>
</role>
</roleMap>
Он содержит два roleMap тегов типа: globalRoles и projectRoles.
До сих пор я был в состоянии добавить пользователя в globalRoles и projectRoles используя следующий скрипт:
read -p 'Enter UserName and projectName :' user projectName
echo -e "user name :$user project name :$projectName"
xmlstarlet ed -P -S -s "/hudson/authorizationStrategy/roleMap
[@type='globalRoles']/role[@name='ABC Employee']/assignedSIDs"
-t elem -n sid -v $user -s "/hudson/authorizationStrategy/roleMap
[@type='projectRoles']/role[@name='$projectName']/assignedSIDs" -t elem
-n sid -v $user config.xml >me1.xml
mv config.xml config_old.xml
mv me1.xml config.xml
Что мне нужно, чтобы включить некоторые условия в сценарии, который помог бы мне:
1) Проверьте файл xml (все ли теги закрыты или нет.)
2) Найдите, присутствует ли пользователь $ в глобальных ролях или нет. (если пользователь уже присутствует в глобальных ролях, сценарий не должен добавлять пользователя и давать предупреждение «пользователь уже существует в глобальной роли»).
3) Найдите, присутствует ли пользователь в проектных разрешениях конкретного проекта. (Если пользователь присутствует в конкретном проекте, скрипт должен дать предупреждение «пользователь уже присутствует в этом конкретном проекте»).
Я не уверен, какая команда может использоваться для проверки тегов в XML-файле. (Я думаю об использовании команды grep или awk).
Check [ 'XMLStarlet val'] (http://xmlstar.sourceforge.net/doc/UG/ch04s04.html) – npostavs
я сделал это уже .. с помощью этого (XMLStarlet вал -w config.xml). необходимо найти строки между этими узлами (globalRoles & projectRoles) и проверить их. Мне нужно некоторое программирование здесь, что поможет проверить эти теги xml. –
'xmlstarlet val 'проверяет все теги/узлы в документе. Вы можете использовать ['xmlstarlet sel'] (http://xmlstar.sourceforge.net/doc/UG/ch04.html), чтобы проверить наличие узлов. – npostavs