Как получить значение тега из XML в строке - PullRequest
0 голосов
/ 06 мая 2020

У меня объявлена ​​указанная ниже переменная

TEXT='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://ws.chpconsulting.com/alfa/requestcontext/v1" xmlns:v11="http://ws.chpconsulting.com/alfa/user/v1"><soapenv:Header><v1:context></v1:context></soapenv:Header><soapenv:Body><v11:load><!--Optional:--><userId>IN2Z83</userId></v11:load></soapenv:Body></soapenv:Envelope>'

Как получить значение тега userID в сценарии оболочки

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Предполагая, что вы используете оболочку типа bash, которая понимает синтаксис here string , вы можете использовать инструмент командной строки XML, например xmlstarlet:

xmlstarlet sel -t -v '//userId' <<< "$TEXT"

или hxselect из W3 C s HTML - XML -Utils package:

hxselect -c userId <<< "$TEXT"

или другой инструмент по вашему выбору.

В противном случае вы можете передать текст XML в инструмент:

echo "$TEXT" | xmlstarlet sel -t -v '//userId'
0 голосов
/ 06 мая 2020

Попробуйте это

 grep -o 'userId>.*</userId' | sed 's/^.*>//g;s/<.*$//g'

Демо:

$echo $TEXT
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://ws.chpconsulting.com/alfa/requestcontext/v1" xmlns:v11="http://ws.chpconsulting.com/alfa/user/v1"><soapenv:Header><v1:context></v1:context></soapenv:Header><soapenv:Body><v11:load><!--Optional:--><userId>IN2Z83</userId></v11:load></soapenv:Body></soapenv:Envelope>
$echo $TEXT | grep -o 'userId>.*</userId' | sed 's/^.*>//g;s/<.*$//g'
IN2Z83
$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...