Member 11403304 Ответов: 1

Как добавить условия в XSLT?


Как проверить, что узел TimeStampChange является единственным узлом с кодом Op
И в CaseEvent нет ОП коды на любые другие дочерние узлы? т. е. CaseEvent\TimeStampChange ОП="Е" и никаких ОП-коды на каких-либо других дочерних элементов.

Если заявление будет Правда когда TimeStampChange это единственный узел в CaseEvent что есть ОП код.
Если какой-либо другой узел имеет код Op, то оператор If будет Ложный

Вот xml, который я читаю

<Case>
   <CaseEvent Op="E">
      <RevDate Op="E">08/01/2019</RevDate>
      <CompDate Op="E">08/01/2019</CompDate>
      <TimestampChange Op="E">08/01/2019 14:07:15:690</TimestampChange>
   </CaseEvent>
</Case>


Что я уже пробовал:

Вот мой xslt-код. Мне нужна помощь, чтобы добавить и условие также проверить, есть ли у каких-либо других дочерних узлов в CaseEvent код Op
Приведенный выше XML должен возвращать false, поскольку и TimeStampChange, и CompDate имеют @OP. Она должна возвращать только true, если только TimeStampChange как @ОП или когда TimeStampChange нет @ОП, но CompDate присвоен @ОП

Мое утверждение if возвращает true.

<xsl:if test="(@Op='E') and (((CompDate[@Op='A']) or (CompDate[@Op='E'])) or (TimestampChange[@Op='E'] and count(*[@Op])=1))">True</xsl:if>

1 Ответов

Рейтинг:
12

Richard Deeming

Попробуй:

<xsl:if test="TimestampChange[@Op='E'] and count(*[@Op]) = 1">True</xsl:if>


РЕДАКТИРОВАТЬ: Основываясь на вашем обновленном вопросе и комментарии, я предполагаю, что вы хотите следующее:
  • Если CompDate[@Op] является либо "Е", либо "а", то утверждение истинно тогда и только тогда, когда TimestampChange не имеет никакого Op атрибут, независимо от того, имеют ли другие узлы Op атрибут;
  • В противном случае утверждение истинно, если таковое имеется, только если TimestampChange является единственным узлом с Op атрибут;

<xsl:if test="((CompDate[@Op='E'] or CompDate[@Op='A']) and TimestampChange and count(TimestampChange[@Op])=0) or (TimestampChange[@Op] and count(*[@Op])=1)" >True</xsl:if>


Member 11403304

Кажется, это работает. Однако есть новые требования, данные мне владельцем проекта. Мне также нужно проверить, есть ли в CompDate Op="E" или "A". Если CompDate[@ОП="А"] или CompDate[@ОП="е"] потом его правда пока TimeStampChange нет @соч. Я добавляю код к тому, который вы мне дали, но он возвращает true, когда он должен возвращать false для приведенного выше XML. XML выше должен возвращать false. Вот что я добавил. <xsl:if test="(@Op='E') and ((CompDate[@Op='A']) or (CompDate[@Op='E']) or (TimestampChange[@Op='E'] and count(*[@Op])=1))">