как извлечь xml значений элементов со строкой найти в lua - PullRequest
0 голосов
/ 25 февраля 2020

Мне нужно извлечь имя пользователя, значения элемента Password из заголовка soap в soap конверте с использованием lua.

Пример запроса -

...
<soap:Header><wsse:Security xmlns:wsse=“http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd” soapenv:mustUnderstand=“1”>
<wsse:UsernameToken><wsse:Username>testuser</wsse:Username>
<wsse:Password wsse:Type=“http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText”>testpassword</wsse:Password>
</wsse:UsernameToken></wsse:Security></soap:Header>
...

с использованием следующего не дает правильный результат (не может использовать xml парсеры), есть ли лучший способ Pattern это?

local username = string.match(soapload, "^.+Username>(.+)</wsse:Username>.+$")
local password = string.match(soapload, "^.+PasswordText\">(.+)</wsse:Password>.+$")

1 Ответ

2 голосов
/ 25 февраля 2020

В вашем примере используется код "правильная двойная кавычка" (PasswordText”>) \ u201D, поэтому вы ничего не получили. И им не нужно бежать, это не нужно.

local soapload = [[
<soap:Header><wsse:Security xmlns:wsse=“http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd” soapenv:mustUnderstand=“1”>
<wsse:UsernameToken><wsse:Username>testuser</wsse:Username>
<wsse:Password wsse:Type=“http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText”>testpassword</wsse:Password>
</wsse:UsernameToken></wsse:Security></soap:Header>
]]

local username = string.match(soapload, "<wsse:Username>(.-)</wsse:Username>")
local password = string.match(soapload, "PasswordText”>(.-)</wsse:Password>")

print(username)
print(password)
...