Subject: Re: trying to bypass empty elements From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx> Date: Tue, 28 Nov 2000 15:04:45 +0000 |
Cedric, > How can I bypass an empty element: > > <xsl:template match="/"> > blahblah..... > .... > <xsl:apply-templates select="elmt"/> > </xsl:template> [snip] > I want to do something like this on the <elmt> element but only if there is > some data / subelement in it! You can access an element's content by looking at its child nodes with the XPath: child::node() or (as the 'child' axis is the default axis), simply: node() This XPath gives you a list of the nodes that form the content of the element. When you cast that list of nodes to a boolean, it is true if there are any nodes in the list or false if not. So 'boolean(node())' will return false if the element is completely empty. You can use this predicate to filter the list of elements to which you apply templates: <xsl:apply-templates select="elmt[node()]" /> This says 'apply templates to those 'elmt' elements that have any child nodes'. [Note: within a predicate, expressions are cast to booleans - you don't have to do it explicitly.] You may want to tighten this a bit more: you might only be interested in whether the elmt elements have child elements or non-whitespace textual content, for example (and want to ignore those that just have comments or processing instructions as content), in which case you can use: elmt[* or normalize-space()] i.e. select elements that have element children or that have a string value that isn't entirely whitespace. I hope that 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 -> |
---|---|---|
trying to bypass empty elements, Cedric Trolez | Thread | transposing a table, Pollington, Lee (ELS |
Re: Result Tree Fragments, Steve Muench | Date | ANNOUNCE: xsl sourcecode of www.sou, T.Pospisek's MailLis |
Month |