如何使用 xmlstarlet 验证 xml 标签?
How to validate xml tags using xmlstarlet?
我有一个 xml 文件:config.xml,其中包含以下标签:
<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。
到目前为止,我已经能够使用以下 shell 脚本在 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) 查找 $user 是否已经存在于全局角色中。 (如果用户已经存在于全局角色中,脚本不应添加用户并发出警告“用户已经存在于全局角色中”)。
3)Find whether user is already present in projectRoles of specific project.(如果用户存在于特定项目中,脚本必须给出警告“用户已经存在于特定项目中”)。
我不确定哪个命令可用于验证 xml 文件中的标签。 (我正在考虑使用 grep 命令或 awk )。
首先感谢大家的意见。
首先,我使用以下命令验证了 xml 文件:
xml小明星 val -w config.xml
然后,我在 if..else..fi 条件循环中使用 grep 命令来验证 xml 文件中存在的用户。
if(echo $user | grep -o -q "$user" config.xml).... then... else... fi.
我有一个 xml 文件:config.xml,其中包含以下标签:
<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。
到目前为止,我已经能够使用以下 shell 脚本在 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) 查找 $user 是否已经存在于全局角色中。 (如果用户已经存在于全局角色中,脚本不应添加用户并发出警告“用户已经存在于全局角色中”)。
3)Find whether user is already present in projectRoles of specific project.(如果用户存在于特定项目中,脚本必须给出警告“用户已经存在于特定项目中”)。
我不确定哪个命令可用于验证 xml 文件中的标签。 (我正在考虑使用 grep 命令或 awk )。
首先感谢大家的意见。
首先,我使用以下命令验证了 xml 文件:
xml小明星 val -w config.xml
然后,我在 if..else..fi 条件循环中使用 grep 命令来验证 xml 文件中存在的用户。
if(echo $user | grep -o -q "$user" config.xml).... then... else... fi.