Как разобрать xml и получить значение с помощью скрипта оболочки - PullRequest
0 голосов
/ 14 января 2020

У меня есть следующее xml,

<?xml version="1.0" encoding="UTF-8"?>
<power-domains>
                <power-domain name="Security" cache-type="default">
                    <authentication>
                        <login-module code="test.module" flag="required" module="com.test.nms">
                            <module-option name="principal" value="admin"/>
                            <module-option name="userName" value="admin"/>
                            <module-option name="password" value="YSFSDwe"/>
                        </login-module>
                    </authentication>
                </power-domain>
</power-domains>

С помощью сценария оболочки мне нужно проанализировать вышеуказанное содержимое и получить значение userName и пароля?

Пожалуйста, объясните мне, как делать?

1 Ответ

2 голосов
/ 14 января 2020

Вы можете использовать эту команду для извлечения значений:

xmlstarlet sel -t \
    -v '//module-option[@name = "userName"]/@value' \
    -nl \
    -v '//module-option[@name = "password"]/@value' \
  file.xml

и, предполагая, что ваша оболочка bash, для чтения этих значений в переменные оболочки, используйте Замена процесса :

{
    IFS= read -r userName
    IFS= read -r password
} < <(
    xmlstarlet sel -t -v '//module-option[@name = "userName"]/@value' -nl -v '//module-option[@name = "password"]/@value' file.xml  
)

echo "$userName"; echo "$password"
admin
YSFSDwe
...