|
Subject: Re: [xsl] copy attributes modifying their values, regardless of their names From: Emmanuel Bégué <eb@xxxxxxxxxx> Date: Sat, 4 Dec 2010 09:29:16 +0100 |
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 -> |
|---|---|---|
| [xsl] copy attributes modifying the, TW | Thread | Re: [xsl] copy attributes modifying, TW |
| [xsl] copy attributes modifying the, TW | Date | Re: [xsl] copy attributes modifying, TW |
| Month |