Извлечение имени операции с использованием Xpath1.0 - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь извлечь имя операции из входящего запроса.

Запрос:

<soapenv:Envelope xmlns:ser="http://visa.com/sd/pc/service" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header>
   </soapenv:Header>
   <soapenv:Body wsu:Id="id-058C2E38D966BC3F2E15372874505064" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
      <ser:ReportRequest FromDate="2017-11-01"  Timezone="GMT" ToDate="2017-11-30" TransactionType="All"/>
   </soapenv:Body>
</soapenv:Envelope>

Используется Xpath : /*[local-name()='Envelope']/*[local-name()='Body']/*

Получение результата : <ser:ReportRequest xmlns:ser="http://visa.com/sd/pc/service" FromDate="2017-11-01" Timezone="GMT" ToDate="2017-11-30" TransactionType="All"/>

ожидаемый результат : ReportRequest

Любое предложение?

1 Ответ

0 голосов
/ 19 сентября 2018

Чтобы получить ожидаемый результат ReportRequest, вам нужно изменить выражение XPath на

local-name(/*[local-name()='Envelope']/*[local-name()='Body']/*)

. Получает локальное имя первого потомка в XPath-1.0.
Если выхотите получить имена всех дочерних элементов, которые вам нужно будет перебрать по основному пути, и получить local-name() каждого элемента отдельно.


Если у вас будет доступен XPath-2.0, выможно упростить это и использовать следующее выражение

/*[local-name()='Envelope']/*[local-name()='Body']/*/local-name()

, чтобы получить все имена всех потомков элемента soapenv:Body.

...