Использование XPath Predicate для выбора значения на основе квалификаторов внутри цикла - PullRequest
1 голос
/ 02 октября 2019

У меня есть следующий XSL для выбора значения из элемента C50602 на основе значения в элементе NAD01 и элемента C50601 с использованием предикатов Xpath. На NADLoop1 имеется петлевой функтоид.

<CustomerReference>
    <xsl:value-of select="/*[local-name()='EFACT_D96A_ORDERS']/*[local-name()='NADLoop1'][NAD01 = 'SN']/*[local-name()='RFFLoop2']/*[local-name()='RFF_2']/*[local-name()='C506_2'][C50601 = 'IT']/*[local-name()='C50602']"></xsl:value-of>
</CustomerReference>

Код является встроенным XSLT внутри скриптообразного функтоида. Однако при его выполнении я не получаю значение в своем элементе CustomerReference, хотя не получаю ошибок.

Входящий элемент RFFLoop2 выглядит следующим образом:

<ns0:RFFLoop2>
      <ns0:RFF_2>
        <ns0:C506_2>
          <C50601>IT</C50601>
          <C50602>1135</C50602>
        </ns0:C506_2>
      </ns0:RFF_2>
    </ns0:RFFLoop2>

У меня естьздесь используется документация по xPath https://www.w3schools.com/xml/xpath_syntax.asp

Что не так с моими текущими предикатами? Я ожидаю, что значение '1135' будет сопоставлено с моим элементом CustomerReference.

1 Ответ

1 голос
/ 02 октября 2019

Я пытался.

//*[local-name()='RFFLoop2']/*[local-name()='RFF_2']/*[local-name()='C506_2'][C50601 = 'IT']/*[local-name()='C50602']

на freeformatter.com, ваш xpath работает нормально.

enter image description here

попробуйте изменить[NAD01 = 'SN'] до [*[local-name()='NAD01'] = 'SN']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...