Разобрать ответ XML в javascript. получить значение указанного тега c в javascript - PullRequest
0 голосов
/ 03 августа 2020

У меня есть xml ответ. Я хочу получить значение «respuesta» в теге <return>.

<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://">
    <S:Body>
        <ns2:cardtransactionResponse xmlns:ns2="http://">
            <return>
                {
                 "terminalid":"00250425",
                 "retailerid":"000000001848033",
                 "trantime":"151333",
                 "referencia":"021515133324",
                 "networkid":"024",
                 "respuesta":"00",
                 "trandate":"0802",
                 "tipomensaje":"000000",
                 "auditno":"000016"
                 }
            </return>
        </ns2:cardtransactionResponse>
    </S:Body>
</S:Envelope>

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Поскольку вы имеете дело с xml, лучший способ приблизиться к нему - использовать xpath:

const xmlstring = `[your xml above]`
let DOMParser = require('xmldom').DOMParser,
  doc = new DOMParser().parseFromString(xmlstring),
  xpath = require('xpath'), 
  select = xpath.useNamespaces({ns2: 'ns2'}),
  target = select('//return', doc, true);
console.log(target.toString().split( '"respuesta":')[1].split( ',')[0]);

Вывод:

"00"
0 голосов
/ 03 августа 2020

Если вы хотите проанализировать этот json с использованием подхода регулярного выражения, вы можете попробовать следующее:

const responsemsg = `<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://">
<S:Body>
    <ns2:cardtransactionResponse xmlns:ns2="http://">
        <return>
            {
             "terminalid":"00250425",
             "retailerid":"000000001848033",
             "trantime":"151333",
             "referencia":"021515133324",
             "networkid":"024",
             "respuesta":"00",
             "trandate":"0802",
             "tipomensaje":"000000",
             "auditno":"000016"
             }
        </return>
    </ns2:cardtransactionResponse>
</S:Body>
</S:Envelope>`
const regexexp = /\"respuesta\"\:(.+?)\,/
const respuestaMatch = regexexp.exec(responsemsg);
console.log(respuestaMatch[0])
//""respuesta":"00","
console.log(respuestaMatch[1])
//"00"

Если вы хотите узнать больше о регулярном выражении, перейдите по ссылке .

...