Subject: Re: Using xsl:if to determine if a node is empty. From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx> Date: Sun, 15 Oct 2000 19:19:40 +0100 |
Roger, You're trying to test here whether the VENDOR_ITEM_NUM element is an empty element or not - in other words does it have any child nodes. You can form a node set that holds the child nodes of the current node (the VENDOR_ITEM_NUM element using the XPath: child::node() Note however, that this will get *any* node in the content of the element: elements, text, processing instructions and even comments. Probably you want to limit this to only elements and text nodes that consist of more than just whitespace: child::text()[normalize-space(.)] | child::* or, shorter: text()[normalize-space(.)] | * These XPaths actually tell you whether the element has any content. In fact, VENDOR_ITEM_NUM probably only takes text children anyway, and it's only their value that you care about. If you are interested in whether the VENDOR_ITEM_NUM element has some textual content that isn't just whitespace you can get the nodes that make up that text using just: text()[normalize-space(.)] If you just run a test on that node set, then you will get 'true' if there are any nodes in the node set, and 'false' if there aren't. But in a test like this, then you can alternatively test whether the current node has a 'string value' (which is formed by concatenating together the string values of all the text and element child nodes), so you can use: normalize-space(.) So try: <xsl:template match="VENDOR_ITEM_NUM"> <tr> <td></td> <td> <font size="2"> <xsl:if test="normalize-space(.)"> <xsl:value-of select="concat('Vendor Item number: ',.)"/> </xsl:if> </font> </td> </tr> </xsl:template> If you want to use a variable to hold an empty string to test against, you should probably define it as: <xsl:variable name="empty_string" select="''" /> as this creates an empty *string* rather than an empty 'result tree fragment'. You should then be able to test with it as in: <xsl:template match="VENDOR_ITEM_NUM"> <tr> <td></td> <td> <font size="2"> <xsl:if test="normalize-space(.) != $empty_string"> <xsl:value-of select="concat('Vendor Item number: ',.)"/> </xsl:if> </font> </td> </tr> </xsl:template> but don't forget to normalize-space() the content of the element, just to get rid of any whitespace that might be lurking around. I hope that this helps, Jeni Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: Using xsl:if to determine if a , Kay Michael | Thread | Re: Using xsl:if to determine if a , Gary L Peskin |
Re: XSLT V 1.1, Jeni Tennison | Date | Re: space replaced with %20, Jeni Tennison |
Month |