Нужно выбрать только одно значение из нескольких элементов

Мне нужно получить только одно значение из нескольких элементов с некоторыми условиями

Входной XML:

   <PlanMaps>
      <_PlanMaps>
        <PolicyNum>456789</PolicyNum>
      </_PlanMaps>
      <_PlanMaps>
        <PolicyNum>456789</PolicyNum>
      </_PlanMaps>
      <_PlanMaps>
        <PolicyNum>0456789</PolicyNum>
      </_PlanMaps>
    </PlanMaps>

XSLT Я пробовал:

          <IndexField>
                 <idxName>Number</idxName>
                 <idxValue>
                    <xsl:choose>
                       <xsl:when test="PlanMaps/_PlanMaps/PolicyNum[not(starts-with(., '0'))]">
                          <xsl:value-of select="PlanMaps/_PlanMaps/PolicyNum"/>
                       </xsl:when>
                       <xsl:otherwise>
                          <xsl:value-of select="''"/>
                       </xsl:otherwise>
                    </xsl:choose>
                 </idxValue>
              </IndexField>

Вывод, который я получаю

<idxValue>456789 456789 0456789</idxValue>

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

<idxValue>456789</idxValue>

Здесь я должен проверить два условия: одно состоит в том, что если есть несколько <PolicyNum> с одинаковым значением, должно быть выбрано первое значение, а другое — если есть только одно <PolicyNum> и его значение начинается с 0, оно должно быть пустым.

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
41
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

xsl:value-of должен использовать тот же xpath, что и xsl:when.

XPath для получения первого элемента в наборе узлов

(//PlanMaps/_PlanMaps/PolicyNum[not(starts-with(., '0'))])[1]/text()

Ответ принят как подходящий

Принимая ответ LMC, я думаю, что ваш код можно просто сократить до:

<IndexField>
  <idxName>Number</idxName>
  <idxValue>
  <xsl:value-of select="(PlanMaps/_PlanMaps/PolicyNum[not(starts-with(., '0'))])[1]"/>
  </idxValue>
</IndexField>

Это ничего не выведет, если есть только одно значение, начинающееся с нуля, и выведет первое значение, не начинающееся с нуля, если есть несколько значений.

Другие вопросы по теме