I have data like this -
<item>
<name>Bob</name>
<fav_food>pizza</fav_food>
<key>Salary</key>
<value />
<value2>1000</value2>
<value3 />
</item>
I want my output to look like this -
<item>
<name>Bob</name>
<fav_food>pizza</fav_food>
<Salary>1000</Salary>
</item>
In this case, Salary gets the value of 1000 because value is empty and value2 is not (value has higher priority than value2, which has higher priority than value3).
It is guaranteed that value,value2 and value3 all exist, and only one of those is nonempty. Is it possible to use a XSLT transform to do this?
Currently, this is my transform.
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" omit-xml-declaration="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="key">
<xsl:element name="{substring-before(substring-after(.,'{'),'}')}">
<xsl:choose>
<xsl:when test="value != ''">
<xsl:value-of select="following-sibling::value" />
</xsl:when>
<xsl:when test="value2 != ''">
<xsl:value-of select="following-sibling::value2" />
</xsl:when>
<xsl:when test="value3 != ''">
<xsl:value-of select="following-sibling::value3" />
</xsl:when>
</xsl:choose>
</xsl:element>
</xsl:template>
</xsl:stylesheet>