2015-08-31 2 views
-1

У меня есть файл 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).

+0

Check [ 'XMLStarlet val'] (http://xmlstar.sourceforge.net/doc/UG/ch04s04.html) – npostavs

+0

я сделал это уже .. с помощью этого (XMLStarlet вал -w config.xml). необходимо найти строки между этими узлами (globalRoles & projectRoles) и проверить их. Мне нужно некоторое программирование здесь, что поможет проверить эти теги xml. –

+0

'xmlstarlet val 'проверяет все теги/узлы в документе. Вы можете использовать ['xmlstarlet sel'] (http://xmlstar.sourceforge.net/doc/UG/ch04.html), чтобы проверить наличие узлов. – npostavs

ответ

0

Прежде всего спасибо за вклад каждого. Во-первых, я обосновал файл XML с помощью следующей команды:

XMLStarlet Вэл -w config.xml

Затем я использовал команду Grep, если .. еще .. фи условный цикл, чтобы проверить, присутствующую в XML-файле пользователя.

if(echo $user | grep -o -q "$user" config.xml).... then... else... fi. 
Смежные вопросы