Subject: Re: [xsl] copy attributes modifying their values, regardless of their names From: TW <zupftom@xxxxxxxxxxxxxx> Date: Sat, 4 Dec 2010 21:00:54 +0100 |
Yay, that's of course it! I feel relieved and embarrassed at the same time. I thought attribute value templates were only possible in literal result elements. Thanks a lot! Thomas W. 2010/12/4 Emmanuel Bigui <eb@xxxxxxxxxx>: > Hi, > > Wouldn't this work: > > <xsl:template match="*"> > <xsl:copy> > <xsl:for-each select="@*"> > <xsl:attribute name="{name()}"> > <xsl:call-template name="modify"/> > </xsl:attribute> > </xsl:for-each> > <xsl:apply-templates/> > </xsl:copy> > </xsl:template> > > ...? > Regards, > EB > > > On Sat, Dec 4, 2010 at 8:45 AM, TW <zupftom@xxxxxxxxxxxxxx> wrote: >> Hi all, >> >> I'm generating XSL stylesheets using XSL. One thing I want to do is >> modify all attribute value templates found in the source document. I >> thought something like this would do the job: >> >> <stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform"> >> <template name="modify-attribute-value-templates"> >> Create replacement value >> </template> >> >> <template match="*"> >> <copy> >> <for-each select="@*"> >> <copy> >> <call-template name="modify-attribute-value-templates"/> >> </copy> >> </for-each> >> <apply-templates/> >> </copy> >> </template> >> </stylesheet> >> >> But much to my chagrin I realized that <copy> already copies the value >> if applied to attributes. A workaround could be a long choose element >> like this: >> >> <template match="*"> >> <copy> >> <for-each select="@*"> >> <choose> >> <when test="not(contains(string(),'{'))"> >> <copy/> >> </when> >> <when test="local-name()='att1'"> >> <attribute name="att1"> >> <call-template name="modify-attribute-value-templates"/> >> </attribute> >> </when> >> <when test="local-name()='att2'"> >> <attribute name="att2"> >> <call-template name="modify-attribute-value-templates"/> >> </attribute> >> </when> >> <!-- a ton of more attributes --> >> <otherwise> >> <message terminate="yes"> >> The attribute value template found in attribute >> <value-of select="local-name()"/> >> isn't handled by the stylesheet. >> </message> >> </otherwise> >> </choose> >> </for-each> >> <apply-templates/> >> </copy> >> </template> >> >> There might be an awful lot of attributes that have to be handled. If >> I don't know what attributes are to be found in the source document, >> then I I'll have to add another step to the process, creating the >> above choose statement using another stylesheet. >> >> I refuse to believe that something I thought would be done in three >> lines turns out to require thousands of lines for case differentiation >> and potentially an additional step in the process. Can anyone help? >> >> Thomas W.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] copy attributes modifying, Emmanuel Bégué | Thread | Re: [xsl] copy attributes modifying, Michael Kay |
Re: [xsl] copy attributes modifying, Emmanuel Bégué | Date | Re: [xsl] copy attributes modifying, Michael Kay |
Month |