Tuesday, 15 July 2014

XSLT a little confused -



XSLT a little confused -

having little problem xslt.. think may going wrong way.. trying display client name sku of items special 1 status in line... client special 2 items etc. part 2(which haven't started) items without status themselves

so xml file output be

joe prod1 //special1 joe prod3 //special2 joe prod2 //no status joe prod4 //no status joe prod5 //no status john smith prod6 prod8 //special1 john smith prod7 //no status john smith prod9 //no status john smith prod10 //no status

it kind of works @ moment problem if there no special1 or special2 can't figure out how create not print client name..

and i'm not sure how display ones no status afterwards either - help much appreciated!

xml:

<customer> <name>joe</name> <order> <item> <sku>prod1</sku> <status>special1</status> </item> <item> <sku>prod2</sku> </item> <item> <sku>prod3</sku> <status>special2</status> </item> <item> <sku>prod4</sku> </item> <item> <sku>prod5</sku> </item> </order> </customer> <customer <name>john smith</name> <order> <item> <sku>prod6</sku> <status>special1</status> </item> <item> <sku>prod7</sku> </item> <item> <sku>prod8</sku> <status>special1</status> </item> <item> <sku>prod9</sku> </item> <item> <sku>prod10</sku> </item> </order>

xslt:

<!doctype xsl:stylesheet[ <!entity nl "&#xd;&#xa;"> ]>

<xsl:template match="customer"> <xsl:value-of select="name" /><xsl:apply-templates select="order/item[status='special1']" /><xsl:text>&nl;</xsl:text> <xsl:value-of select="name" /><xsl:apply-templates select="order/item[status='special2']" /><xsl:text>&nl;</xsl:text> </xsl:template> <xsl:template match="item[status='special1']"><xsl:text> </xsl:text><xsl:value-of select="sku" /></xsl:template> <xsl:template match="item[status=special2']"><xsl:text> </xsl:text><xsl:value-of select="sku" /></xsl:template> <xsl:template match="text()"/>

your simplest alternative xsl:if

<xsl:template match="customer"> <xsl:if test="order/item[status='special1']"> <xsl:value-of select="name" /><xsl:apply-templates select="order/item[status='special1']" /><xsl:text>&nl;</xsl:text> </xsl:if> <xsl:if test="order/item[status='special2']"> <xsl:value-of select="name" /><xsl:apply-templates select="order/item[status='special2']" /><xsl:text>&nl;</xsl:text> </xsl:if> </xsl:template>

xslt

No comments:

Post a Comment