xsl-list
[Top] [All Lists]

Re: [xsl] flat xml tree to indent one

2010-12-21 08:29:14
Thank you Michael and David,
This List is incredibly reactive, thanks to guys like you, that's really appreciated.

Just for information, i'm working on tranformation of inDesign IDML format to some more easy XML... and then convert it to XHTML or epub for example.
An interresting challenge ;)

I understood both of your solutions, and i will adapt the a mixe of them to my real case.
I agree Mickael, this is not a real grouping case, my apologize.

I could'nt find a way to iterate through attribute, cause following:@*[1] is not valid xpath syntax !
But using position() or removing attribute reccursivly make the trick !
I'm glad, I learn 2 xpath2 functions today : exist() and remove() !

One more time thanks a lot to you too,

Matt








Le 21/12/2010 13:47, Michael Kay a écrit :
On 21/12/2010 12:30, Matthieu Ricaud-Dussarget wrote:
Hi all,

This is a grouping question one more time.
It's not actually a grouping problem as commonly understood.

For such an input :

<p foo="foo_att" bar="bar_att" foobar="foobar_att">my text</p>

I'd like such an output :

<p>
<foo><bar><foobar>my text</foobar></bar></foo>
</p>

the order foo/bar/foobar isn't important here.
<foobar><bar><foo>my text</foo></bar></foobar> would also be ok.

This should work for any number of attributes (including none)

You need to process the attributes one at a time, recursively:

<xsl:template match="p[(_at_)*]">
<xsl:variable name="temp">
<p>
<xsl:copy-of select="remove(@*, 1)"/>
<xsl:element name="{name(@*[1])}">
<xsl:copy-of select="child::node()"/>
</xsl:element>
</p>
</xsl:variable>
<xsl:apply-templates select="$temp"/>
</xsl:template>

<xsl:template match="p[not(@*)]">
<xsl:sequence select="."/>
</xsl:template>

Michael Kay
Saxonica

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




--
Matthieu Ricaud
IGS-CP
Service Livre numérique



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>