[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Hi,
A slight qualification (really for the archive):
On 8/16/2012 5:35 AM, it was written:
There is an edge case in which this will give an error (in XSLT 2.0) unless you control your data to prevent more than one 'image-size' element appearing somewhere inside the parent of 'media': if more than one is the first 'image-size' child of their respective parents.
This is due to the problematic semantics of "//node" (which expands to "/descendant-or-self::node()/child::node") when used with a positional predicate such as [1]:
..//image-size[1]
expands to
parent::node()/descendant-or-self::node()/child::image-size[position() = 1]
Under 1.0, normalize-space() will take the first element in a node-set argument in any case (no error), so you don't even need the [1].
But it might be good to learn
normalize-space(../descendant::image-size[1])
in case you're ever running under XSLT 2.0 ...
... at least as long as you agree that a little paranoia never hurt ...
Re: [xsl] moving an element and then converting it to an attribute
Subject: Re: [xsl] moving an element and then converting it to an attribute From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> Date: Thu, 16 Aug 2012 11:28:43 -0400 |
Hi,
A slight qualification (really for the archive):
On 8/16/2012 5:35 AM, it was written:
in a template for<media> just pull in the value of<image-size> like this:
<xsl:template match="media"> <xsl:copy> <xsl:apply-templates select="@*" /> <xsl:attribute name="image-size" select="normalize-space(..//image-size[1])"/> </xsl:copy> </xsl:template>
This assumes that<media> is an empty element.
As<image-size> is not a sibling of<media> I go to the parent element (..) and search all descendants (//) for<image-size>. In case there are multiple<image-size> present I just use the first instance as otherwise the normalize-space() function would create a run-time error.
There is an edge case in which this will give an error (in XSLT 2.0) unless you control your data to prevent more than one 'image-size' element appearing somewhere inside the parent of 'media': if more than one is the first 'image-size' child of their respective parents.
This is due to the problematic semantics of "//node" (which expands to "/descendant-or-self::node()/child::node") when used with a positional predicate such as [1]:
..//image-size[1]
expands to
parent::node()/descendant-or-self::node()/child::image-size[position() = 1]
Under 1.0, normalize-space() will take the first element in a node-set argument in any case (no error), so you don't even need the [1].
But it might be good to learn
normalize-space(../descendant::image-size[1])
in case you're ever running under XSLT 2.0 ...
... at least as long as you agree that a little paranoia never hurt ...
Cheers, Wendell
====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] moving an element and the, Michael Müller-Hille | Thread | Re: [xsl] moving an element and the, Michael Müller-Hille |
Re: [xsl] Process following sibling, David Carlisle | Date | Re: [xsl] Process following sibling, Wendell Piez |
Month |