У меня есть многоуровневый блок XML, мое требование - добавить новый тег Scenario для каждого блока Employee. Значение в новом теге сценария может изменяться в зависимости от значения в теге события
FROM
<Extract>
<Header>
<Date1>01/01/2020</Date1>
</Header>
<Employee>
<Status>
<Event>Event_1</Event>
</Status>
</Employee>
<Employee>
<Status>
<Event>Event_2</Event>
</Status>
</Employee>
</Extract>
TO
<Extract>
<Header>
<Date1>01/01/2020</Date1>
</Header>
<Employee>
<Status>
<Event>Event_1</Event>
</Status>
<Scenario>A</Scenario>
</Employee>
<Employee>
<Status>
<Event>Event_2</Event>
</Status>
<Scenario>B</Scenario>
</Employee>
</Extract>
Я играл с этим , Я могу успешно вставить тег, но перед добавлением тега мне нужен оператор выбора для определения желаемого результата в теге. Как показано ниже
<xsl:param name="to-insert">
<xsl:choose>
<xsl:when test="Employee/Status/Event = 'Event_1' ">
<Scenairo>A</Scenairo>
</xsl:when>
<xsl:when test="Employee/Status/Event = 'Event_2' ">
<Scenairo>B</Scenairo>
</xsl:when>
<xsl:otherwise>
<Scenairo><xsl:value-of select="'no scenario mapped'"/></Scenairo>
</xsl:otherwise>
</xsl:choose>
</xsl:param>
<!-- Copy all sections of XML -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Employee">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
<xsl:copy-of select="$to-insert"/>
</xsl:copy>
</xsl:template>