Условие IF в XSLT путем сравнения количества подузлов в родительском узле - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь выполнить l oop A или L oop B на основе количества узлов

 empjobcount -> "count(employmentNav/EmpEmployment/compInfoNav/EmpCompensation/startDate)"  
 compcount -> "count(employmentNav/EmpEmployment/jobInfoNav/EmpJob/startDate)"

, как передать счет в параметр, чтобы выполнить условие if. Ниже приведена синтаксическая ошибка.

<xsl:if test= {"count(employmentNav/EmpEmployment/compInfoNav/EmpCompensation/startDate)" ge "count(employmentNav/EmpEmployment/jobInfoNav/EmpJob/startDate)"} >
</xsl:if>

Псевдокод: если empjobcount> compcount. loopA. остальное. LOOPB. ENDIF.

1 Ответ

0 голосов
/ 01 мая 2020

Отбросьте фигурные скобки, т.е. используйте test="count(employmentNav/EmpEmployment/compInfoNav/EmpCompensation/startDate) >= count(employmentNav/EmpEmployment/jobInfoNav/EmpJob/startDate)". Я также думаю, что вам нужно xsl:choose/xsl:when test/xsl:otherwise вместо одного xsl:if, если вам действительно нужно выполнить две разные ветви кода.

Поскольку вы пометили свой вопрос для XSLT 2.0 и XSLT 3.0, возможно, будет возможно решать вещи на уровне выражения XPath с помощью выражения if (conditional expression) then expression1 else expression2, например,

if (count(employmentNav/EmpEmployment/compInfoNav/EmpCompensation/startDate) >= count(employmentNav/EmpEmployment/jobInfoNav/EmpJob/startDate)) then mf:foo() else mf:bar()

, где mf:foo и mf:bar будут пользовательскими функциями, настроенными с помощью xsl:function.

Полное описание с разговорами о циклах звучит так, как будто вы пытаетесь использовать процедурное программирование с XSLT, вы можете показать нам небольшие, но репрезентативные выборки XML ввода, вывода, которые вы хотите вместе с правилами, которые вы хотите реализовать, чтобы мы могли быть в состоянии предложить более XSLT-подобный подход.

...