XSLT - отменить дочерний элемент, если последний символ идентификатора равен - PullRequest
0 голосов
/ 25 января 2019

Добрый вечер,

У меня проблемы с XSLT, мне нужно проверить / изменить проект, начатый 3 года назад.

На данный момент шаблон применения отформатирован так: <xsl:apply-templates select="foo[make != 'Contoso'][prices/listPrice != '0.0'][type = 'USED']"/>.

Если последний символ идентификатора foo - P, мне нужно сбросить его и перейти к следующему.

Я искал различные решения, но никто не работал.

EDIT:

Я использую версию 1.0 XSLT

1 Ответ

0 голосов
/ 25 января 2019

Я предполагаю, что ваш входной XML выглядит примерно так:

<root>
  <foo ID="XXXP">
    <make>Abcd</make>
    <prices>
      <listPrice>5000.0</listPrice>
    </prices>
    <type>USED</type>
  </foo>
  <foo ID="XXX">
    <make>Xyz</make>
    <prices>
      <listPrice>2000.0</listPrice>
    </prices>
    <type>USED</type>
  </foo>
</root>

Чтобы представить вашу модификацию, добавьте [not(ends-with(@ID, 'P'))] к select атрибут, означающий:

  • Дополнительный предикат ([...]).
  • Вы ссылаетесь на атрибут ID текущего элемента (foo).
  • Вы требуете, чтобы это ID не заканчивалось P.

Поскольку вы не указали версию XSLT, я использовал версию 2.0.

Рабочий пример см. http://xsltransform.net/3MP2uBF/1

Дополнительное замечание: Думаю, лучший способ проверить цену ! = 0 :

[number(prices/listPrice) != 0]

(я включил его в вышеупомянутый пример).

Если вы ограничены версией 1.0, используйте соответствующее эквивалентное выражение (версия 1.0 не имеет функции ends-with).

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